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

Django执行migrate后sqlite3未生成表、字段缺失OperationalError报错求助

Django迁移失败表字段缺失解决方案

问题根因

  1. 你的迁移链在执行meetups.0005_auto_20211026_1234时就因默认值格式错误崩溃,后续生成的包含删除enormus字段、新增dates/organizer_emails字段的迁移根本没有执行,导致数据库表结构、Django迁移记录、models.py三者状态不一致,才会出现admin操作时报表没有enormus字段的错误。
  2. 之前执行迁移时输入的非字符串格式默认值(比如数字1)和日期字段类型不匹配,是迁移执行报错的直接原因。
  3. ManyToManyField配置null=True属于无效配置,会触发警告。

修复步骤

  • 第一步:清理无效迁移记录

    1. 查看meetups应用的迁移执行状态,找到最后一个成功执行的迁移(正常为0004版本):
      python manage.py showmigrations meetups
    2. 把meetups应用的迁移状态伪回退到最后一个正常版本,仅修改Django的迁移记录,不改动数据库结构:
      python manage.py migrate --fake meetups 0004
    3. 手动删除meetups/migrations目录下所有编号大于0004的迁移文件(即0005到0011的所有py文件,注意不要删__init__.py)。
  • 第二步:修正models.py配置

    1. 删掉participant字段(ManyToManyField类型)的null=True参数,该参数对多对多字段无意义。
    2. 给所有新增的非空字段直接配置default参数,避免后续生成迁移时手动输入默认值出错:
      • 日期字段示例:dates = models.DateField(default="2021-10-10"),或者导入django.utils.timezone后设default=timezone.now
      • 邮箱字段示例:organizer_emails = models.EmailField(default="test@test.com")
      • 如果允许字段为空,直接配置null=True, blank=True即可,不需要设默认值。
  • 第三步:重新执行迁移

    1. 重新生成迁移文件:
      python manage.py makemigrations meetups
    2. 执行迁移,此时不会再报错:
      python manage.py migrate

内容的提问来源于stack exchange,提问作者Саша Саша

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:18:01