对admin后台方法常用方法的重写

对数据的增加和修改数据方法的重写

  1. save_model(self, request, obj, form, change)

示例需求

  • 增加数据

    • 对密码字段进行加密操作
  • 修改数据

    • 判断用户身份

代码实现

  1. @admin.register(User) # 绑定的数据模型
  2. class UserAdmin(admin.ModelAdmin): # 对后台数据进行注册并执行相关操作
  3. def save_model(self, request, obj, form, change):
  4. if change: # 说明这是修改的操作
  5. if request.user.is_superuser:
  6. """Actions related to background super-administrators"""
  7. pass
  8. else:
  9. """Actions related to the normal administrator"""
  10. pass
  11. super().save_model(request, obj, form, change)
  12. else: # 说明这是增加的操作
  13. obj.password = make_password(password=obj.password)
  14. obj.save()

对删除的用户数据的数据方法的重写

示例需求

  • 根据不同的权限进行不同的操作

代码实现

  1. def delete_model(self, request, obj):
  2. if request.user.is_superuser:
  3. """Actions related to background super-administrators"""
  4. pass
  5. else:
  6. """Actions related to the normal administrator"""
  7. pass
  8. super().delete_model(request, obj)

对页面显示的数据的数据方法的重写

  1. def get_queryset(self, request):

示例需求

  • 如果是超级用户 显示所有用户信息
  • 不是超级用户 不显示超级管理员和管理员信息

代码实现

  1. def get_queryset(self, request):
  2. if request.user.is_superuser:
  3. """Actions related to background super-administrators"""
  4. return super().get_queryset(request)
  5. else:
  6. """Actions related to the normal administrator"""
  7. return User.objects.filter(Q(is_active=False) or Q(is_superuser=False))

对界面显示的外键信息的数据方法重写

  1. super().formfield_for_foreignkey(db_field, request, **kwargs)

示例需求

  • 根据不同的权限进行不同的操作

代码实现

  1. def formfield_for_foreignkey(self, db_field, request, **kwargs):
  2. if request.user.is_superuser:
  3. """Actions related to background super-administrators"""
  4. return super().formfield_for_foreignkey(db_field, request, **kwargs)
  5. else:
  6. """Actions related to the normal administrator"""
  7. return super().formfield_for_foreignkey(db_field, request, **kwargs)