如何检测管理员在Django中修改用户的时间

时间:2015-03-12 13:03:25

标签: python django django-admin

我为管理员和普通用户使用Django的用户模型。有时管理员需要手动修改用户帐户,例如更改电子邮件或禁用某个帐户。这些修改是从Django附带的基本管理面板完成的。

问题是,如何检测这些修改事件?我需要这个来制作一些日志条目和做其他事情。

我已经尝试过用户的pre_save信号,可以用来检测哪些字段会改变,但问题是我不知道save()来自哪里。

2 个答案:

答案 0 :(得分:2)

模型保存在ModelAdmin.save_model()方法中。

您可以取消注册User模型的默认管理员,并使用您自己的ModelAdmin注册并覆盖save_model()

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):

    def save_model(self, request, obj, form, change):
        # do whatever you want.
        # obj - the User instance to change
        # request.user - admin
        obj.save()


admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

答案 1 :(得分:0)

您可以通过检查save_model来检查form.changed_data方法中的字段是否已更改。这是已更改字段的名称列表。下面是一个小代码

def save_model(self, request, obj, form, change):
    if 'parking_location' in form.changed_data:
        messages.info(request, "Parking location has changed")
    else:
        messages.info(request, "Parking location has not changed")
    super(MyVehiclesAdmin, self).save_model(request, obj, form, change)