2013-03-14 63 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