继承AbstractUser后无法创建Django超级用户,报错无api_user.name列
问题原因与解决步骤
核心原因:数据库未同步模型变更
错误提示的no such column: api_user.name说明数据库中还没有name字段——你在模型里新增了字段,但没把这些变更同步到数据库中。
解决步骤:
确认settings.py配置
必须在项目的settings.py中指定自定义User模型,否则Django会默认使用自带的User模型:AUTH_USER_MODEL = 'api.User' # 替换成你的app名称.User,比如你的app是api就写这个生成并应用数据库迁移
在终端执行以下命令,让Django生成迁移文件并同步到数据库:python manage.py makemigrations python manage.py migrate执行完成后,数据库里就会创建
api_user表以及对应的name等字段。
模型代码的优化点(避免后续问题)
移除自定义的password字段
AbstractUser已经内置了password字段,且Django会自动处理密码哈希存储。自定义password字段会覆盖原有逻辑,导致密码验证失效,直接删除这一行:# 删掉这行:password = models.CharField(max_length=200, default="")修正REQUIRED_FIELDS配置
REQUIRED_FIELDS是创建超级用户时需要额外输入的必填字段列表。你的name字段是必填项(无blank=True),email也应设为必填,所以修改为:REQUIRED_FIELDS = ['name', 'email']调整profileImg的上传路径
不要直接指向frontend/src/assets/profileImgs/,建议配置Django的媒体文件路径:- 在
settings.py中添加:MEDIA_ROOT = BASE_DIR / 'media' MEDIA_URL = '/media/' - 修改模型中的
profileImg:profileImg = models.ImageField(upload_to='profileImgs/', blank=True)
这样上传的图片会存在项目根目录的
media/profileImgs/下,后续可通过MEDIA_URL访问,更符合Django最佳实践。- 在
内容的提问来源于stack exchange,提问作者codeouz
相关产品推荐
相关产品推荐

