2011-04-29 68 views
5

我決定使用Django-Simple-History來構建我的模型的歷史記錄。反過來使用它來構建儀表板。儘管我遇到了一些困難。我試圖在[時間]上輸出[用戶] [添加,更改,刪除] [對象],但是我無法想象出我的生活。自定義儀表板的Django歷史記錄

到目前爲止,我能夠顯示模板上的歷史記錄,但我無法訪問其他任何東西,我是否錯過了一些東西?

我希望有一個具有簡單歷史知識的人可以提供幫助,因爲我無法抓住作者。

這是我迄今爲止的代碼片段。

Models.py

from simple_history.models import HistoricalRecords 

class Project(django.db.models.Model): 
... 
history = HistoricalRecords() 

Views.py

@login_required 
def addTMProject(request): 
user = request.user 
if request.method == 'POST': 
    form = TimeMaterialsForm(request.POST) 
    if form.is_valid(): 
     project = form.save(commit=False) 
     project.created_by = request.user 
     today = datetime.date.today() 
     project.pre_quote = "%s-" % (str(today.year)[2:4]) 
     project.quote = Project.objects.latest().quote+1 
     project.save() 
     project.history.all() 
     ... 

而且我也把它傳給我的儀表板/ views.py,所以我可以訪問它。

@login_required 
def view_dash(request): 
    today = datetime.date.today() 
    user = request.user 
    proj_perm = user.has_perm('project.add_project') 
    project = Project.objects.all().order_by('-proj_name') 
    query = Project.objects.all().order_by('-id')[:5] 
    que_quotes = Project.objects.filter(status__value__exact = 'Quote') 
    expired = FollowUp.objects.filter(next_followup__lte=today).order_by('next_followup').filter(archived=False) 
    log = LogEntry.objects.select_related().all().order_by("-id") 
    hist = Project.history.all() 
return render_to_response('dashboard/home.html', {'user': user, 'project': project, 'query':query, 'que_quotes':que_quotes, 'expired':expired, 
                'proj_perm':proj_perm, 'log': log, 'hist':hist,}, context_instance=RequestContext(request)) 

最後從我的模板中摘錄。因爲它是現在,{{H}}顯示了模板「測試簡單的記錄爲2011-04-29十點43分57秒」

home.html的

{% if user.is_authenticated %} 
<div id="large_box"> 
    <h5>Activity</h5> 
     {% for h in hist %} 
     <ul> 
      <li>{{ h }}</li> 
     </ul> 
     {% endfor %} 

如果任何人都可以幫助或指向我更深入的文檔,那就太棒了!

謝謝大家!

回答

6

Django的簡單歷史只是簡單地創建一個反映你把它綁的對象,並將另外四場模型(以及相關的數據庫表):history_idhistory_datehistory_typehistory_object

history_id:標準主鍵

history_date:日期時間,用於當發生變更

history_type:的+之一,~-。(+手段增加,~手段改變,-手段刪除)

history_object:歷史是被存儲爲

因此,在最基本的層面模型的表示,你可以大致得到「[添加,更改在你的輸出刪除],在[時間/ [對象]」,用的東西的效果:你可能會想創建模板標籤或東西轉換

{{ h.history_type }} {{ h.history_object }} on/at {{ h.history_date }} 

+~和向-更容易理解,「創造」,「改變」,「刪除」。 {{ h.history_object }}應該返回對象的__unicode__,我假設,所以您可能需要在那裏進行一些修改或返回類似{{ h.history_object.__class__ }}{{ h.history_object._meta.verbose_name }},而不是。 (不知道這些實際上是否會在實際中起作用。)當然,您可以將date篩選器應用於{{ h.history_date }},以使其成爲您想要的任何格式。

獲取用戶比較困難。 Django-Simple-History似乎沒有存儲這些數據,所以沒有記錄用戶進行修改的情況。但是,由於它基本上是複製了存在的對象,所以您可能會在爲模型添加modified_by字段並用request.user預保存填充字段時逃脫。然後,當Django-Simple-History發揮作用時,該字段將像其他內容一樣被複制,並通過{{ h.modified_by }}提供。

+1

謝謝,多數民衆贊成在我正在尋找的線路。謝謝你的詳細迴應,我以前見過這個,但你的解釋比我以前見過的要好。 – TheLifeOfSteve 2011-05-04 17:54:28

1

我假設你遇到的唯一問題是顯示歷史數據,而不是實際的保存部分。

我不確定您的項目模型中有哪些字段,但它看起來像歷史字段被視爲外鍵字段。此外鍵的表格包含與您的項目模型相同的字段。所以,如果你要訪問的字段,你不得不做這樣的事情在你的模板:

... 
{% for h in hist %} 
<ul> 
    <li>{{h.field1}} {{h.field2}} {{h.field3}} on {{h.field4}}</li> 
</ul> 
{% endfor %} 
... 

我找到了這個網頁(http://qr7.com/2010/10/django-simple-history-ftw/),這是非常有用的,但你必須玩的歷史字段名稱。我不太確定他們究竟是什麼。

希望有所幫助。