(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' 时。基本上保持同名但改变属性特征是不行的。希望有同样问题的朋友可以解决这个问题
我知道这个问题已被问过几次,但以前的答案都无法解决我的问题。
我在 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' 时。基本上保持同名但改变属性特征是不行的。希望有同样问题的朋友可以解决这个问题