我为管理员和普通用户使用Django的用户模型。有时管理员需要手动修改用户帐户,例如更改电子邮件或禁用某个帐户。这些修改是从Django附带的基本管理面板完成的。
问题是,如何检测这些修改事件?我需要这个来制作一些日志条目和做其他事情。
我已经尝试过用户的pre_save信号,可以用来检测哪些字段会改变,但问题是我不知道save()来自哪里。
答案 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)