我有一个带有以下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。如果我错了,请纠正我,否则整个问题无效。