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

自定义Django User与Group后无法获取组权限的问题

问题原因及解决方法

问题根源

你自定义的Group模型中,permissions字段设置了related_name="fk_group_permission",而Django内置的权限查询逻辑(比如get_group_permissions())依赖于原生Group模型与Permission模型关联的默认反向名称group_set。修改这个反向关联名称后,Django内部的查询语句无法正确匹配权限关联,进而触发类型错误。

另外,完全自定义AbstractGroup的实现方式,没有对齐原生Group的关联逻辑,也会导致内置权限方法处理查询时出现参数类型混淆。

解决步骤

  1. 移除自定义的related_name配置
    修改AbstractGroup中的permissions字段,删除related_name="fk_group_permission",让Django使用默认的反向关联名称group_set:

    class AbstractGroup(models.Model):
        name = models.CharField(_("name"), max_length=150, unique=True)
        permissions = models.ManyToManyField(
            Permission,
            verbose_name=_("permissions"),
            blank=True,
            # 移除related_name配置
        )
        # 其他代码保持不变
    
  2. 更稳妥的Group继承方式(可选)
    如果你不需要自定义AbstractGroup,可以直接让Group继承原生django.contrib.auth.models.Group,再添加自定义字段is_active,这样能最大程度兼容内置权限系统:

    from django.contrib.auth.models import Group as BaseGroup
    
    class Group(BaseGroup):
        is_active = models.BooleanField(_("Is Active"), default=True)
    
  3. 更新数据库结构
    修改模型后执行迁移命令:

    python manage.py makemigrations
    python manage.py migrate
    

验证修改

完成上述操作后,重新调用a_user.get_group_permissions()或a_user.get_all_permissions(),即可正常获取组权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:22:33