(1054, "Unknown column '' in 'field list'")

(1054, "Unknown column '' in 'field list'")

我知道这个问题已被问过几次,但以前的答案都无法解决我的问题。

我在 Django 中有一个完美的工作模型,看起来像这样:

class Template(models.Model):
    mat = models.CharField(max_length=50, null=True)
    ...

我有很多这个模型的实例,到目前为止我对它非常满意。我最近决定,这个模型更适合在这个位置使用 ForeignKey,而不是 Charfield。

要详细说明,属性“'mat'”以前仅引用另一个对象实例的名称。我决定将其更改为带有 ForeignKey 的完整实例,就像它应该一直那样。因此,模型修改如下:

class Template(models.Model):
    mat = models.ForeignKey(Stock, on_delete=models.CASCADE, related_name='mat_stock', verbose_name="mat", null=True)
    ...

我按照常规 */manage.py makemigrations*/manage.py migrate 进行了更改。虽然这两个命令有效,但我无法在不引发以下错误的情况下 select shell 中的任何模板实例:

OperationalError: (1054, "Unknown column 'myapp_template.mat_id' in 'field list'")

我遇到的类似情况已通过在 SQL 中手动添加以下行的列得到解决:

ALTER TABLE database.myapp_template ADD mat INT;

不幸的是,这并没有解决我的问题。

我认为问题可能在于我的对象实例已经在“'mat'”列中具有字符值。迁移后 Django 会期望整数值(特别是“id”),因此我决定为模板创建一个全新的属性,如下所示:

class Template(models.Model):
    pos_mat = models.ForeignKey(Stock, on_delete=models.CASCADE, related_name='mat_stock', verbose_name="mat", null=True)
    ...

我认为这会删除(或忽略)“mat”列并创建具有所需属性的新“pos_mat”列,而不必处理不适合的旧字符值要求。从那里开始,它应该就像添加一个全新的 ForeignKey 属性一样。

在要求并成功后 */manage.py makemigrations*/manage.py migrate 我仍然无法在 shell 中访问我的模型实例。我仍然感到不愉快:

OperationalError: (1054, "Unknown column 'myapp_template.mat_id' in 'field list'")

有人知道如何说服 Django 接受我的更改吗?我怀疑将迁移回滚到零是否会对我有所帮助(它没有解决我过去的问题),我希望它不会删除我的数据。我的模型在此列中有一个空字段是可以接受的,因为我在我的属性中添加了 null=True

非常感谢您的帮助。祝你有个美好的一天。

我已经通过回滚到上次稳定迁移解决了我的问题。从那里我能够迁移 'mat' 不存在且 'pos_mat' 是唯一属性的模型。这意味着我的问题出现在第一次从旧版本 'mat' 迁移到新版本 'mat' 时。基本上保持同名但改变属性特征是不行的。希望有同样问题的朋友可以解决这个问题