rra*_*nza 21 django django-migrations
在使用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')]),
)
Run Code Online (Sandbox Code Playgroud)
阅读Django bug DB中的bug等,它似乎unique_together与db中存在的不匹配迁移历史记录有关.
如何解决此错误并完成迁移?
rra*_*nza 31
(Postgres和MySQL答案)
如果您查看实际的表(使用\d table_name)并查看索引,您将找到唯一约束的条目.这就是Django试图找到和放弃的东西.但它无法找到完全匹配.
例如,
"table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c)
Run Code Online (Sandbox Code Playgroud)
在我的例子中,键的顺序与(d, a, b, c)它想要删除的约束不匹配(a, b, c, d).
我回到了我的迁移历史记录中并更改了原始数据AlterUniqueTogether以匹配数据库中的实际顺序.
然后迁移成功完成.
当我将 CharField 切换为外键时,我遇到了类似的问题。一切都在这个过程中进行,但我认为 Django 仍然需要unique_together在新的迁移中更新。(尽管从 postgres 内部看来一切都是正确的。)不幸的是,应用这个新的迁移会给出类似的错误:
ValueError: Found wrong number (0) of constraints for program(name, funder, payee, payer, location, category)
最终对我有用的修复方法是注释掉AlterUniqueTogether该模型之前的所有操作。manage.py migrate之后就没有错误了。
| 归档时间: |
|
| 查看次数: |
8226 次 |
| 最近记录: |