为什么Django抱怨一个新的模型列是未知的,而不是迁移它



我使用的是Django 3.0和Python 3.6。我有一个型号:

class Data(models.Model):
parameter = models.CharField(
max_length=16,
blank=True,
null=True
)
mode = models.CharField(
max_length=8,
blank=True,
null=True
)
value = models.PositiveSmallIntegerField(
blank=True,
null=True
)

一切都很好。然后,我在模型中添加了一个字段:

class Data(models.Model):
parameter = models.CharField(
max_length=16,
blank=True,
null=True
)
mode = models.CharField(
max_length=8,
blank=True,
null=True
)
value = models.PositiveSmallIntegerField(
blank=True,
null=True
)
code = models.CharField(
max_length=64,
blank=True,
null=True
)

在没有做任何其他事情的情况下,我尝试运行迁移。它导致了这个错误:

$ python3 manage.py makemigrations
...
django.db.utils.OperationalError: (1054, "Unknown column 'appName_data.code' in 'field list'")

是的,不,这是一个未知的列,这就是为什么我想让你把它添加到表中。

我已经尝试过搜索这个错误,但我能找到的只是2008年之前Stack Overflow上的内容,我无法将其应用于我的情况,以及一些我甚至无法开始阅读的晦涩的旧错误报告。

我该怎么办?

编辑:

我手动添加了列:

mysql> ALTER TABLE appName_data ADD code VARCHAR(64) NULL;

之后,makemigrations将成功运行,但当我尝试执行迁移时,我会得到错误

django.db.utils.OperationalError: (1060, "Duplicate column name 'code'")

当时,models.py仍然定义了code列。我删除了该字段并重试,但无论哪种方式,migrate步骤都返回相同的错误。

不知道如何继续。

您能分享您的迁移吗?

看起来你的数据库因为某种原因失去了同步
一种快速而肮脏的方法是手动将列添加到数据库中,如下所示:(现在还不要这样做,让我先看看您的迁移!(

python manage.py dbshell

检查表并选择目标表,在本例中为appName_data

sqlite> .tables 

然后将代码列添加到数据库

像这样:

ALTER TABLE table_name
ADD new_column_name column_definition;

在您的情况下:

sqlite>ALTER TABLE appName_data
...>ADD core VARCHAR(64) NULL ;

相关内容

最新更新