对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"""
pass
else:
"""Actions related to the normal administrator"""
pass
super().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"""
pass
else:
"""Actions related to the normal administrator"""
pass
super().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)