ForeignKey to OneToOne:ProgrammingError:关系已经存在(但实际上并不存在)

时间:2018-04-09 13:52:31

标签: django django-migrations

我有一个带有以下Django迁移的数据库:

0001_initial.py:

migrations.AddField(
    model_name='extrashirtprice',
    name='sibs_weekend',
    field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='registration.SibsWeekend'),
),

所以我想把它变成OneToOneField。所以有一个新的迁移:

0012_auto.py:

operations = [
    migrations.AlterField(
        model_name='extrashirtprice',
        name='sibs_weekend',
        field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='registration.SibsWeekend'),
    ),
]

我检查并确保在0012中完成的操作没有在其他任何地方完成。

当我运行迁移时,我得到:

django.db.utils.ProgrammingError: relation "registration_extrashirtprice_sibs_weekend_id_6626038b_uniq" already exists

我看了Django - Change a ForeignKey relation to OneToOne,但他们正在谈论使用--fake,它实际上不会应用唯一约束。另外,我们使用自动脚本进行部署,因此我希望尽可能避免添加命令。这篇文章也没有实际可接受的答案,而且是在南方迁移的背景下,所以我宁愿看看如何以更好的方式使用Django迁移。

我可以使用具有唯一约束的ForeignKey(我假设)但是如果可能的话我想使用更官方的OneToOneField。

注意:我正在使用数据在数据库上运行这些迁移。它不是空的,所以如果问题与数据有关,请告诉我如何修复,因为我不想丢失生产数据。

另外,我假设OneToOneField只是一个具有唯一约束的ForeignKey。如果我错了,请纠正我,否则整个问题无效。

0 个答案:

没有答案