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
相关产品推荐
相关产品推荐

