Django - 不会让我向模型添加新字段,因为 1054,“未知列‘字段列表’”)

tro*_*ife 6 django

我试图按照简单的规则简单地将布尔字段添加到数据库中的模型中:

- add field to model
- python manage.py makemigrations app
- python manage.py migrate app
Run Code Online (Sandbox Code Playgroud)

几乎 99% 的时间都有效。因此,在第二步(makemigrations)中,当我的模型中新添加的字段即将运行时,我收到一个错误:

django.db.utils.OperationalError: (1054, "Unknown column 'model.field' in 'field list'")
Run Code Online (Sandbox Code Playgroud)

出色的。它不允许我通过添加新字段来进行迁移......因为它找不到我要新添加的字段......非常有道理!

不管怎样,我已经删除了所有的迁移,删除了我的新字段,再次进行迁移,迁移......一切都很好 - 所以现在我只有 1 个迁移文件(0001)......

按照与上述相同的步骤操作...错误

我在这里错过了一些可笑的事情吗?我的意思是,向模型添加字段非常简单,我可能已经这样做了 1000 次。姜戈为什么这么取笑我

编辑: 回答:

好的,我已经做到了。

删除迁移文件、截断迁移表并使用 0001_initial.py 迁移后,我制作了一个空的迁移文件(python manage.py makemigrations --empty app)并手动添加了该字段......然后我迁移并且它起作用了!说实话,对此感到困惑,但至少已经做出了改变:

  • 删除所有迁移文件
  • 截断 django_migrations 表
  • 注释新的布尔字段
  • 运行 python manage.py makemigrations
  • 运行 python manage.py migrate --fake
  • 运行 python manage.py makemigrations --empty app
  • 在操作中手动将字段添加到空迁移文件中:

    migrations.AddField('modelName', 'fieldName', models.BooleanField(default=False)),
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行 python manage.py migrate

  • 取消注释新的布尔字段,使其代表您在迁移操作中所做的操作

arg*_*rgo 7

免责声明-仅在本地系统上遵循此操作,对于生产,请务必理解这些步骤,然后执行。

请按照以下步骤操作:

  • 删除所有迁移文件
  • 截断 django_migrations 表
  • 注释新的布尔字段
  • 跑步python manage.py makemigrations
  • 跑步python manage.py migrate --fake
  • 取消布尔字段的注释
  • 跑步python manage.py makemigrations
  • 跑步python manage.py migrate

一般来说,这些步骤可以解决任何类型的迁移问题

另一个原因可能是,如果您使用django_rest_framework,那么序列化程序也需要根据您的模型更改进行更新。