2013-03-14 183 views
3

您在Django Admin中所做的所有更改都記錄在表django_admin_table中,您還可以在「最近的操作」中看到最近的更改。Django - 自定義管理操作日誌記錄

但是,當您編寫自己的「管理員操作」並通過它們進行更改時,默認情況下不會記錄任何內容。

例子:

def make_checked(modeladmin, request, queryset): 
    queryset.update(checked = 1) 
make_checked.short_description = 'Mark selected products as checked' 

我的問題是,如果現在有可能記錄自定義管理行爲,如果是這樣,如何?

回答

10

看看管理員的LogEntry模型,更重要的是LogEntryManager。模型管理器提供了一個log_action方法,它可以很容易地添加自己的日誌項(這是未經測試,但應該給你的想法):

​​

你可以看到logging being used in the normal django admin一些例子。如果你只是想添加一個LogEntry整個查詢集,你可以做手工(如上面的log_entry預計一組特定的參數定製記錄單個對象):

l = LogEntry(user_id=request.user.id, actions_flag=CHANGE, change_message="...") 
l.save() 
1

謝謝!一些小的變化後,工作完美:

def make_checked(modeladmin, request, queryset): 
    queryset.update(checked = 1) 

    ct = ContentType.objects.get_for_model(queryset.model) # for_model --> get_for_model 
    for obj in queryset: 
     LogEntry.objects.log_action(# log_entry --> log_action 
      user_id = request.user.id, 
      content_type_id = ct.pk, 
      object_id = obj.pk, 
      object_repr = obj.title, 
      action_flag = CHANGE, # actions_flag --> action_flag 
      change_message = 'Changed checked.') 
make_checked.short_description = 'Mark selected products as checked' 
+0

糟糕。這是sl。。無論如何,我已經更新了我的帖子以便清楚。確保接受其中一個答案爲正確的 – 2013-03-14 19:50:50