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

时间:2018-08-16 15:45:01

标签: django

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

- 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)并手动添加了该字段。...然后迁移而且有效!说实话,对此感到困惑,但至少已进行了更改:

  • 删除所有迁移文件
  • 截断django_migrations表
  • 评论新的布尔字段
  • 运行python manage.py makemigrations
  • 运行python manage.py migration --fake
  • 运行python manage.py makemigrations --empty应用程序
  • 在以下操作中将字段手动添加到空的迁移文件中:

    migrations.AddField('modelName', 'fieldName', models.BooleanField(default=False)),
    
  • 运行python manage.py migration

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

3 个答案:

答案 0 :(得分:1)

请遵循以下步骤:

  • 删除所有迁移文件
  • 截断django_migrations表
  • 评论新的布尔字段
  • 运行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定义中注释掉这两个字段。迁移完成后,我取消了对这两个字段的注释。