如何检测管理员何时修改 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)
我为管理员和普通用户使用 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)