在 Django 迁移期间收到“ValueError: Found wrong number of (0) of constraint for ...”
·
问题:在 Django 迁移期间收到“ValueError: Found wrong number of (0) of constraint for ...”
在使用 Django 1.7 迁移时,我遇到了一个在开发中有效但在生产中无效的迁移:
ValueError: Found wrong number (0) of constraints for table_name(a, b, c, d)
这是由AlterUniqueTogether规则引起的:
migrations.AlterUniqueTogether(
name='table_name',
unique_together=set([('a', 'b')]),
)
阅读 Django 错误数据库中的错误等,似乎与数据库中现有的unique_together不匹配迁移历史记录有关。
如何解决此错误并完成我的迁移?
解答
(Postgres 和 MySQL 的回答)
如果您查看您的实际表(使用\d table_name)并查看索引,您将找到唯一约束的条目。这就是 Django 试图寻找和放弃的东西。但它找不到完全匹配的。
例如,
"table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c)
在我的例子中,键(d, a, b, c)的顺序与它希望删除(a, b, c, d)的约束不匹配。
我回到我的迁移历史并更改了原始AlterUniqueTogether以匹配数据库中的_actual_顺序。
然后迁移成功完成。
更多推荐

所有评论(0)