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

Django自定义用户模型报错:identifier字段冲突问题求助

问题原因与解决建议

核心原因

  1. USERNAME_FIELD赋值错误:你直接将字段对象identifier赋值给了USERNAME_FIELD,但Django要求该属性必须接收字段名称的字符串。直接使用变量会导致Django在解析模型元数据时,混淆字段对象和字段名称,进而触发字段冲突的系统检查错误。
  2. 缺少唯一性约束:作为用户标识的identifier字段必须设置unique=True,因为USERNAME_FIELD对应的字段需要唯一标识每个用户,未设置的话也会触发系统检查报错。

修复步骤

1. 修正models.py代码

调整MyUser类的定义,确保USERNAME_FIELD为字符串形式,且identifier字段添加唯一性约束:

from django.contrib.auth.models import AbstractUser
from django.db import models

class MyUser(AbstractUser):
    identifier = models.CharField(max_length=150, unique=True)  # 新增唯一性约束
    USERNAME_FIELD = 'identifier'  # 改为字符串形式的字段名
    REQUIRED_FIELDS = []  # 若需其他必填字段,可在此添加,比如email等

2. 重新执行迁移命令

如果项目还未执行过初始迁移(migrate命令),直接运行以下命令即可:

python manage.py makemigrations accounts
python manage.py migrate

注意事项

如果项目已经执行过迁移操作,修改AUTH_USER_MODEL会比较麻烦——Django不支持在项目中途轻易修改自定义用户模型。这种情况下:

  • 若数据量不大,可清空数据库、删除accounts/migrations/下除__init__.py外的所有迁移文件,再重新执行迁移。
  • 若已有重要数据,需要手动编写迁移脚本处理数据迁移逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:00:59