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

How to detect when admin modifies User in Django

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

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

我已经尝试了 pre_save 用户信号,它可以用来检测哪些字段会发生变化,但问题是我不知道 save() 的来源。

模型保存在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)

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

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)