【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 2015-01-23
        • 2010-12-10
        • 2020-01-08
        • 2013-05-22
        • 1970-01-01
        • 2018-01-28
        • 2017-06-08
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多