django-admin行动1.1

时间:2009-05-15 12:07:02

标签: django django-admin

我正在django中写一个动作。我现在想要通过动作更新的行或说行的id字段。我想记录所有动作。

我的字段状态有3个值:'activate','pending','reject'。我已经采取行动将状态更改为activate.when我执行操作时想要记录行更新,所以我需要一些值,可以存储在日志中,如id对应该行

2 个答案:

答案 0 :(得分: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()

希望这有帮助。

答案 1 :(得分:0)

这很容易!

只需创建一个查询集循环,然后就可以访问该行的每个字段并将其存储在所需的位置。

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