【问题标题】:How to detect when admin modifies User in Django如何检测管理员何时在 Django 中修改用户
【发布时间】:2015-05-14 15:45:51
【问题描述】:
我为管理员和普通用户使用 Django 的用户模型。有时管理员需要对用户帐户进行手动修改,例如更改电子邮件或禁用某些帐户。这些修改是从 Django 附带的基本管理面板完成的。
问题是,如何检测这些修改事件?我需要这个来制作一些日志条目和做其他事情。
我已经尝试过 User 的 pre_save 信号,可以用来检测哪些字段会发生变化,但问题是我不知道 save() 的来源。
【问题讨论】:
标签:
python
django
django-admin
【解决方案1】:
模型保存在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)
【解决方案2】:
您可以通过检查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)