如何修复 Django 和 Postgres SQL 中布尔类型:"abc"的无效输入语法?



我有一个Django模型,它有一个重复的字段名trading,我在运行makemigrationmigrate命令时没有注意到(两个命令都没有抛出任何错误(。正如您在下面的model.py中所看到的;交易;用于BooleanField和CharField。

但现在我想删除或重命名其中一个,Django抛出一个错误:

django.db.utils.DataError: invalid input syntax for type boolean: "future"

我不熟悉PostgresSQL,也不知道如何在不从头开始破坏和重新创建数据库的情况下解决这个问题。

class Account(models.Model):
exchange = models.ForeignKey(Exchange, on_delete=models.CASCADE, related_name='account', null=True)
strategy = models.ForeignKey(Strategy, on_delete=models.CASCADE, related_name='account', null=True)
limit_order, credentials, trading = [models.BooleanField(default=True) for i in range(3)]
trading = models.CharField(max_length=12, null=True, blank=True, choices=[('future', 'future'),
        ('swap', 'swap')
        ])

我尝试先将CharFieldtrading重命名为instrument,但在迁移文件中,Django似乎想添加一个新字段。问题是,我在模型中修改的所有内容都会产生错误。如何在保留数据库的同时解决此问题?

这是生成错误的第一个迁移文件:

# Generated by Django 3.0.6 on 2020-07-16 10:11
from django.db import migrations, models

class Migration(migrations.Migration):
dependencies = [
('trading', '0011_auto_20200714_0758'),
]
operations = [
migrations.AddField(
model_name='account',
name='instrument',
field=models.CharField(blank=True, choices=[('future', 'future'), ('swap', 'swap')], max_length=12, null=True),
),
migrations.AlterField(
model_name='account',
name='trading',
field=models.BooleanField(default=True),
),
]

谢谢

我回答了自己的问题,因为我通过以下方法成功解决了问题:

  • 保留导致问题的第一个迁移文件并删除其他文件
  • 删除对模型中重复字段的所有引用
  • 然后如下修改文件

发件人:

operations = [
migrations.AddField(
model_name='account',
name='instrument',
field=models.CharField(blank=True, choices=[('future', 'future'), ('swap', 'swap')], max_length=12, null=True),
),
migrations.AlterField(
model_name='account',
name='trading',
field=models.BooleanField(default=True),
),
]

收件人:

operations = [
migrations.RemoveField(
model_name='account',
name='trading',
),
]

相关内容

最新更新