3

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

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

4

2 回答 2

9

据我所知,您希望使用自定义操作为您更新的对象创建一个管理日志条目。我实际上做了类似的事情,纯粹是 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()

希望这可以帮助。

于 2009-05-15T18:05:49.360 回答
0

这很容易!

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

for e in queryset:          
   if (e.status != "pending"):
       flag = False
于 2009-05-18T11:16:18.087 回答