django-admin行动1.1

ha2*_*109 3 django django-admin

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

我有一个具有3个值的字段状态:'激活','待定','拒绝'.我已经采取行动将状态更改为激活.当我执行操作时,我希望更新行的日志,以便我需要一些可以存储在日志中的值,例如与该行相对应的id

sim*_*rsh 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) 
Run Code Online (Sandbox Code Playgroud)

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

log_entry = LogEntry.objects.filter(action_flag=4)[:1]
log_entry[0].get_admin_url()
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 如果你谈论django admin,它会记录哪个对象被哪种行为改变(即ADDED,CHANGED,DELETED).如果django没有维护任何日志,那么你的默认管理主页中的动作列表是什么?它是一个行动记录.检查"django.contrib.admin.models.LogEntry".在上面的回答中,我刚刚添加了第四个动作替代方案,您可以从动作中调用它.我猜你注意到了,"action_flag = 4".我编辑了答案,让你知道在哪里调用它. (2认同)