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".
То я могу найти HashTag object (skills)
в моей messaging_hashtag
таблице:
SELECT * FROM messaging_hashtag;
hash_tag
----------
skills
get_or_create
возвращает кортеж, содержащий объект и флаг о том, был ли объект создан или нет, так что что-то вроде: (obj, created)
Чтобы исправить это, просто извлеките obj
из кортежа. Например, используя [0]
на результате:
hash_tags = [ HashTag.objects.get_or_create(hash_tag=ht)[0] for ht in hash_tags_list ]