Django如何将自定义Member用户关联至auth_group?权限存储问题
Django自定义用户模型关联组权限问题解决
一、将用户关联至已有组
Django的Group模型与自定义用户模型(你这里的Member)是多对多关系,关联逻辑通过自动生成的中间表实现,而非auth_group表直接存储用户列。按以下步骤操作即可完成关联:
确认配置自定义用户模型
务必在项目settings.py中设置:AUTH_USER_MODEL = 'members_app.Member'这是让Django识别你的
Member为默认用户模型,自动生成Member与Group的关联中间表(members_app_member_groups)的前提。代码中关联用户与组
通过用户实例的groups属性即可完成关联:from django.contrib.auth.models import Group from members_app.models import Member # 获取目标组 target_group = Group.objects.get(name="你的角色名称") # 获取目标用户 target_user = Member.objects.get(username="用户名") # 添加用户到组 target_user.groups.add(target_group) # 若需批量关联多个组,使用set方法 # target_user.groups.set([group1, group2])后台管理界面操作
将Member模型注册到Django Admin时,在Admin类中显示groups字段,即可在后台直接为用户分配组:from django.contrib import admin from .models import Member class MemberAdmin(admin.ModelAdmin): fields = ('username', 'email', 'address', 'groups') # 包含groups字段 admin.site.register(Member, MemberAdmin)
二、将权限添加至用户个人权限表(members_app_member_user_permissions)
members_app_member_user_permissions存储的是用户的个人独立权限,与组权限相互独立。若要将权限直接分配给用户,操作如下:
获取目标权限
你在Member模型Meta类中定义的权限会被存储到auth_permission表中,可通过codename获取:from django.contrib.auth.models import Permission from members_app.models import Member # 替换为你定义的权限codename target_perm = Permission.objects.get(codename="Perm1_codename") target_user = Member.objects.get(username="用户名")添加权限到用户
通过用户实例的user_permissions属性添加:target_user.user_permissions.add(target_perm) # 批量添加使用set方法 # target_user.user_permissions.set([perm1, perm2])后台管理界面操作
同样在MemberAdmin类中添加user_permissions字段,即可在后台直接为用户分配个人权限:class MemberAdmin(admin.ModelAdmin): fields = ('username', 'email', 'address', 'groups', 'user_permissions')
补充说明
- 你提到的
auth_group_permissions是组与权限的关联表,所有组的权限都会存在这里,属于正常逻辑,无需修改。 - 若之前未配置
AUTH_USER_MODEL就执行了迁移,建议先备份数据,然后重新配置并重新迁移,确保关联表正确生成。
内容的提问来源于stack exchange,提问作者quasar
相关产品推荐
相关产品推荐

