Django中限制Superviser用户仅编辑SuperviserModel的score字段
实现Superviser角色用户仅可编辑Score字段的Django Admin配置
要实现superviser角色用户编辑员工记录时仅能修改score字段,可通过自定义ModelAdmin类并覆盖get_readonly_fields方法来实现,具体步骤如下:
1. 自定义ModelAdmin类
在admin.py中替换原有的模型注册代码,编写自定义的SuperviserModelAdmin类,通过判断用户角色动态设置只读字段:
from django.contrib import admin from .models import SuperviserModel class SuperviserModelAdmin(admin.ModelAdmin): # 定义后台编辑页面显示的所有字段 fields = ['name', 'family', 'score'] def get_readonly_fields(self, request, obj=None): # 检查当前用户是否属于superviser角色组 if request.user.groups.filter(name='superviser').exists(): # 将name和family设为只读,仅保留score可编辑 return ['name', 'family'] # 管理员或其他角色用户可编辑所有字段 return super().get_readonly_fields(request, obj) # 注册模型与自定义的ModelAdmin admin.site.register(SuperviserModel, SuperviserModelAdmin)
2. 适配角色判断逻辑
- 如果你是通过自定义用户模型的字段(如
request.user.is_superviser)来标识superviser角色,只需修改判断条件:if request.user.is_superviser: - 确保superviser角色的用户已正确分配到对应权限组(或设置对应字段),否则判断逻辑不生效。
补充说明
使用get_readonly_fields的优势在于,用户仍能看到name和family字段,但无法修改,符合“仅能修改score”的需求场景。如果需要隐藏这两个字段,可改用get_fields方法控制显示的可编辑字段,但通常保留只读显示更符合业务逻辑。
内容的提问来源于stack exchange,提问作者henrry
相关产品推荐
相关产品推荐

