我试图按照以下简单规则将布尔值字段添加到数据库中的模型中:
- add field to model
- python manage.py makemigrations app
- python manage.py migrate app
除了99%的时间外,其余所有时间都可以工作。因此,在第二步(makemigrations)中,我模型中的新添加字段不见了,我得到一个错误:
django.db.utils.OperationalError: (1054, "Unknown column 'model.field' in 'field list'")
非常好。它不能让我通过添加新字段来进行迁移.....,因为它找不到我要新添加的字段...完全有意义!
无论如何,我甚至删除了所有迁移,删除了我的新字段,再次进行了迁移,迁移...都很好-所以现在我只有1个迁移文件(0001)...
遵循与上述相同的步骤...错误
我在这里错过了一些荒谬的东西吗?我的意思是,向模型添加字段非常简单,而且我大概做了1000次。 Django为什么嘲笑我
编辑:答案:
好的,我已经完成了。
删除迁移文件,截断迁移表并使用0001_initial.py迁移后,我制作了一个空迁移文件(python manage.py makemigrations --empty app)并手动添加了该字段。...然后迁移而且有效!说实话,对此感到困惑,但至少已进行了更改:
在以下操作中将字段手动添加到空的迁移文件中:
migrations.AddField('modelName', 'fieldName', models.BooleanField(default=False)),
运行python manage.py migration
答案 0 :(得分:1)
请遵循以下步骤:
python manage.py makemigrations
python manage.py migrate --fake
python manage.py makemigrations
python manage.py migrate
通常,这些步骤可以解决任何类型的迁移问题
另一个原因可能是,如果您使用的是 django_rest_framework ,那么序列化程序也需要根据您的模型更改进行更新。
答案 1 :(得分:0)
这是一个一直困扰着我的问题,导致我丢了很多兔子掉落的桌子等。当django询问您是否要重命名该模型的字段时,我发现一个简单的解决方案是回答“ N”(运行makemigrations时)。然后,基本上执行的操作是删除先前的字段并创建新的字段。请注意,因为您可能会丢失现有字段上的数据,因此这适用于新字段或相对容易“重新填充”所需数据的字段。如果您在进行makemigrations迁移时遇到无法“丢弃字段”的错误,则可能需要运行--fake。如果您想回到问题之前的迁移状态,则可能需要删除此后所做的迁移,然后尝试上述解决方案。
更新: 我对布尔值字段进行了上述操作,并保留了我的数据。即使我说了N,也似乎本质上是在重命名。
答案 2 :(得分:-1)
问题的另一个来源:我有一个基于模型的ModelForm。 ModelForm定义定义了两个额外的字段。在执行迁移步骤之前,我必须从Form定义中注释掉这两个字段。迁移完成后,我取消了对这两个字段的注释。