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

继承AbstractUser后无法创建Django超级用户,报错无api_user.name列

问题原因与解决步骤

核心原因:数据库未同步模型变更

错误提示的no such column: api_user.name说明数据库中还没有name字段——你在模型里新增了字段,但没把这些变更同步到数据库中。

解决步骤:

  1. 确认settings.py配置
    必须在项目的settings.py中指定自定义User模型,否则Django会默认使用自带的User模型:

    AUTH_USER_MODEL = 'api.User'  # 替换成你的app名称.User,比如你的app是api就写这个
    
  2. 生成并应用数据库迁移
    在终端执行以下命令,让Django生成迁移文件并同步到数据库:

    python manage.py makemigrations
    python manage.py migrate
    

    执行完成后,数据库里就会创建api_user表以及对应的name等字段。


模型代码的优化点(避免后续问题)

  1. 移除自定义的password字段
    AbstractUser已经内置了password字段,且Django会自动处理密码哈希存储。自定义password字段会覆盖原有逻辑,导致密码验证失效,直接删除这一行:

    # 删掉这行:password = models.CharField(max_length=200, default="")
    
  2. 修正REQUIRED_FIELDS配置
    REQUIRED_FIELDS是创建超级用户时需要额外输入的必填字段列表。你的name字段是必填项(无blank=True),email也应设为必填,所以修改为:

    REQUIRED_FIELDS = ['name', 'email']
    
  3. 调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:23:10