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

Django中如何为指定用户组分配模型增删改查权限

报错原因

Group.permissions 是Django内置的多对多关联字段,关联Permission权限模型实例,add()方法仅接受模型实例、实例ID作为入参,直接传入权限编码字符串会触发类型错误。

正确实现代码

首先导入依赖模块:

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
# 导入自定义的Flower模型,替换成你自己的app导入路径即可
from your_app.models import Flower

完整的用户组创建、权限分配、用户关联逻辑:

# 1. 获取或创建目标用户组,get_or_create返回的已存在对象无需重复调用save()
new_group, created = Group.objects.get_or_create(name='mygroup')

# 2. 获取Flower模型对应的内容类型,Django默认模型权限都绑定在该类型下
flower_content_type = ContentType.objects.get_for_model(Flower)

# 3. 查询出需要分配的四个权限实例
target_permissions = Permission.objects.filter(
    content_type=flower_content_type,
    codename__in=['add_flower', 'change_flower', 'delete_flower', 'view_flower']
)

# 4. 批量给用户组添加权限,用*解包查询集传入add方法
new_group.permissions.add(*target_permissions)

# 5. 把目标用户加入该组
user.groups.add(new_group)
注意事项
  • 上述代码针对Django自动生成的默认模型权限生效,四个默认权限会在你首次执行makemigrations时为模型自动创建,无需手动新增。
  • 权限分配完成后,已登录的用户需要重新登录才能生效,因为Django会在用户登录时把权限列表缓存到会话中,不会实时刷新权限状态。

内容的提问来源于stack exchange,提问作者Darwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:24:34