【发布时间】:2020-06-04 05:48:27
【问题描述】:
我正在尝试迁移使用 jazzband django-taggit 的 Django 应用程序 我得到的错误是:
django.db.utils.IntegrityError: could not create unique index "taggit_taggeditem_content_type_id_object_i_4bb97a8e_uniq"
DETAIL: Key (content_type_id, object_id, tag_id)=(41, 596, 242) is duplicated.
有问题的迁移内容如下:
migrations.AlterUniqueTogether(
name="taggeditem", unique_together={("content_type", "object_id", "tag")}
)
转换为以下 SQL:
ALTER TABLE "taggit_taggeditem" ADD CONSTRAINT "taggit_taggeditem_content_type_id_object_i_4bb97a8e_uniq" UNIQUE ("content_type_id", "object_id", "tag_id");
COMMIT;
检查有问题的表我确实得到:
# SELECT * FROM public.taggit_taggeditem WHERE tag_id=242 ORDER BY object_id;
id | tag_id | object_id | content_type_id
------+--------+-----------+-----------------
691 | 242 | 356 | 41
2904 | 242 | 356 | 41
680 | 242 | 486 | 41
2893 | 242 | 486 | 41
683 | 242 | 596 | 41
2896 | 242 | 596 | 41
解决django.db.utils.IntegrityError 错误并成功完成迁移的建议方法是什么?我认为 object_id 486 和 356(+ 更多)也会发生同样的情况。
【问题讨论】:
-
您应该先过滤掉重复项。
-
所以例如我只会保留 id 691 并删除 2904,因为它们具有相同的 tag_id、object_id 和 content_type_id,对吧?
标签: django django-taggit