Django IntegrityError 多对多字段
Django IntegrityError manytomany field
我正在尝试在我的 Django 应用程序中实现主题标签
我有一个带有这样字段的消息模型
hash_tags = models.ManyToManyField(HashTag, related_name='message_hash_tags')
这是 HashTag 模型
hash_tag = models.CharField(max_length=140, primary_key=True)
我正在为这样的消息设置主题标签
hash_tags_list = Functions.extract_hashtags(message["message"])
hash_tags = [HashTag.objects.get_or_create(hash_tag=ht) for ht in hash_tags_list]
messageObj.hash_tags.set(hash_tags)
messageObj.save()
但是这个出错了
django.db.utils.IntegrityError: insert or update on table "messaging_message_hash_tags" violates foreign key constraint "messaging_message_ha_hashtag_id_068959e9_fk_messaging"
DETAIL: Key (hashtag_id)=((<HashTag: HashTag object (skills)>, True)) is not present in table "messaging_hashtag".
不过我可以在我的 messaging_hashtag
table 中找到 HashTag object (skills)
:
SELECT * FROM messaging_hashtag;
hash_tag
----------
skills
get_or_create
returns 一个包含对象的元组和一个关于对象是否已创建的标志,例如:(obj, created)
要解决此问题,只需从元组中提取 obj
。例如在结果上使用 [0]
:
hash_tags = [ HashTag.objects.get_or_create(hash_tag=ht)[0] for ht in hash_tags_list ]
我正在尝试在我的 Django 应用程序中实现主题标签 我有一个带有这样字段的消息模型
hash_tags = models.ManyToManyField(HashTag, related_name='message_hash_tags')
这是 HashTag 模型
hash_tag = models.CharField(max_length=140, primary_key=True)
我正在为这样的消息设置主题标签
hash_tags_list = Functions.extract_hashtags(message["message"])
hash_tags = [HashTag.objects.get_or_create(hash_tag=ht) for ht in hash_tags_list]
messageObj.hash_tags.set(hash_tags)
messageObj.save()
但是这个出错了
django.db.utils.IntegrityError: insert or update on table "messaging_message_hash_tags" violates foreign key constraint "messaging_message_ha_hashtag_id_068959e9_fk_messaging"
DETAIL: Key (hashtag_id)=((<HashTag: HashTag object (skills)>, True)) is not present in table "messaging_hashtag".
不过我可以在我的 messaging_hashtag
table 中找到 HashTag object (skills)
:
SELECT * FROM messaging_hashtag;
hash_tag
----------
skills
get_or_create
returns 一个包含对象的元组和一个关于对象是否已创建的标志,例如:(obj, created)
要解决此问题,只需从元组中提取 obj
。例如在结果上使用 [0]
:
hash_tags = [ HashTag.objects.get_or_create(hash_tag=ht)[0] for ht in hash_tags_list ]