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

Django继承AbstractUser创建用户模型迁移遇E304错误求助

解决Django自定义用户模型迁移E304反向访问器冲突问题

核心原因

当继承AbstractUser创建自定义用户模型时,Django内置的auth.User模型与你的CustomUser模型都会包含groups和user_permissions字段,这两个字段的默认反向访问器名称重复,导致迁移时出现冲突。

解决步骤

1. 配置项目使用自定义用户模型

首先在项目settings.py中声明自定义用户模型,这是使用自定义用户的必要前提,避免Django默认加载auth.User:

# settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'

2. 修改CustomUser模型,设置唯一反向关联名

在CustomUser模型中显式重写groups和user_permissions字段,为它们设置唯一的related_name参数,消除命名冲突:

# accounts/models.py
from django.contrib.auth.models import AbstractUser, Group, Permission
from django.db import models

class CustomUser(AbstractUser):
    # 此处添加你的自定义字段
    # 重写groups和user_permissions字段,配置唯一反向关联名
    groups = models.ManyToManyField(
        Group,
        verbose_name='用户组',
        blank=True,
        related_name='customuser_groups',
        related_query_name='customuser',
    )
    user_permissions = models.ManyToManyField(
        Permission,
        verbose_name='用户权限',
        blank=True,
        related_name='customuser_permissions',
        related_query_name='customuser',
    )

3. 重新执行迁移操作

如果是项目初期无重要数据,可先清理accounts应用下migrations文件夹内除__init__.py外的所有文件,再执行迁移命令:

python manage.py makemigrations
python manage.py migrate

注意事项

  • 若项目已有生产数据,请勿直接删除迁移文件,需先备份数据,再逐步调整迁移脚本。
  • 项目中所有引用用户模型的地方,需使用get_user_model()或直接导入CustomUser,避免使用auth.User。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:22:02