You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:14:57