【问题标题】:django-admin action in 1.11.1 中的 django-admin 操作
【发布时间】:2009-05-15 12:07:01
【问题描述】:

我正在 django 中编写一个操作。我现在想了解由操作更新的行或说该行的 id 字段。我想记录所有操作。

我的字段状态有 3 个值:'activate'、'pending'、'reject'。我已采取措施将状态更改为激活。当我执行该操作时,我想要记录行已更新,因此我需要一些可以存储在日志中的值,例如对应于该行的 id

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    据我所知,您希望使用自定义操作为您更新的对象创建一个管理日志条目。我实际上做了类似的事情,纯粹是 django 做的。作为您的自定义操作,您可以添加这段代码。

    编辑:在您的操作完成后调用此函数,或者我应该说,在您更改状态并保存对象之后。

    def log_it(request, object, change_message):
        """
        Log this activity
        """
        from django.contrib.admin.models import LogEntry
        from django.contrib.contenttypes.models import ContentType
    
        LogEntry.objects.log_action(
            user_id         = request.user.id, 
            content_type_id = ContentType.objects.get_for_model(object).pk, 
            object_id       = object.pk, 
            object_repr     = change_message, # Message you want to show in admin action list
            change_message  = change_message, # I used same
            action_flag     = 4
        )
    
    # call it after you save your object
    log_it(request, status_obj, "Status %s activated" % status_obj.pk) 
    

    您始终可以通过获取 LogEntry 对象来获取您更新的对象

    log_entry = LogEntry.objects.filter(action_flag=4)[:1]
    log_entry[0].get_admin_url()
    

    希望这会有所帮助。

    【讨论】:

    • 据我所知 django 不维护任何日志。你能解释一下吗。我必须在哪里使用这个函数来处理我的操作
    • 如果你谈论 django admin,它会维护一个日志,记录哪个对象被什么样的操作(即添加、更改、删​​除)更改。如果 django 不维护任何日志,那么您的默认管理员主页中的操作列表是什么?它是一个动作日志。检查“django.contrib.admin.models.LogEntry”。在上面的答案中,我刚刚添加了第四种操作,您可以从您的操作中调用它。我猜你注意到了,“action_flag = 4”。我编辑了答案,让你知道在哪里调用它。
    【解决方案2】:

    这很容易!

    只需对您的查询集进行循环,然后您就可以访问该行的每个字段并将其存储在您想要的位置。

    for e in queryset:          
       if (e.status != "pending"):
           flag = False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2010-12-20
      • 2020-07-30
      • 2019-09-09
      • 2016-03-13
      • 2020-09-14
      • 2016-09-16
      相关资源
      最近更新 更多