对admin后台方法常用方法的重写
对数据的增加和修改数据方法的重写
save_model(self, request, obj, form, change)
示例需求
增加数据
- 对密码字段进行加密操作
修改数据
- 判断用户身份
代码实现
@admin.register(User) # 绑定的数据模型class UserAdmin(admin.ModelAdmin): # 对后台数据进行注册并执行相关操作def save_model(self, request, obj, form, change):if change: # 说明这是修改的操作if request.user.is_superuser:"""Actions related to background super-administrators"""passelse:"""Actions related to the normal administrator"""passsuper().save_model(request, obj, form, change)else: # 说明这是增加的操作obj.password = make_password(password=obj.password)obj.save()
对删除的用户数据的数据方法的重写
示例需求
- 根据不同的权限进行不同的操作
代码实现
def delete_model(self, request, obj):if request.user.is_superuser:"""Actions related to background super-administrators"""passelse:"""Actions related to the normal administrator"""passsuper().delete_model(request, obj)
对页面显示的数据的数据方法的重写
def get_queryset(self, request):
示例需求
- 如果是超级用户 显示所有用户信息
- 不是超级用户 不显示超级管理员和管理员信息
代码实现
def get_queryset(self, request):if request.user.is_superuser:"""Actions related to background super-administrators"""return super().get_queryset(request)else:"""Actions related to the normal administrator"""return User.objects.filter(Q(is_active=False) or Q(is_superuser=False))
对界面显示的外键信息的数据方法重写
super().formfield_for_foreignkey(db_field, request, **kwargs)
示例需求
- 根据不同的权限进行不同的操作
代码实现
def formfield_for_foreignkey(self, db_field, request, **kwargs):if request.user.is_superuser:"""Actions related to background super-administrators"""return super().formfield_for_foreignkey(db_field, request, **kwargs)else:"""Actions related to the normal administrator"""return super().formfield_for_foreignkey(db_field, request, **kwargs)
