Django добавление элемента в отношения manytomany внутри метода сохранения
Я пытаюсь добавить поле author в отношения viewed_by manytomany при сохранении модели, но ничего не добавляется и я не знаю почему. Я также пытаюсь использовать сигналы с post_save, но ничего не работает. Пожалуйста, помогите мне.
class Message(AbstractCreateUpdate):
class TypeMessage(models.TextChoices):
TEXT = "TEXT"
EVENT = "EVENT"
IDEA = "IDEA"
UPDATE = "UPDATE"
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
showcase = models.ForeignKey("Showcase",
on_delete=models.CASCADE,
related_name="messages",
related_query_name="messages")
author = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="messages",
related_query_name="messages")
type_message = models.CharField(max_length=32,
choices=TypeMessage.choices)
viewed_by = models.ManyToManyField(settings.AUTH_USER_MODEL,
related_name="messages_visualize",
related_query_name="messages_visualize",
blank=True)
class Meta(AbstractCreateUpdate.Meta):
db_table = "message"
verbose_name = _("Message")
verbose_name_plural = _("Messages")
def save(self, *args, **kwargs):
message = super().save(*args,**kwargs)
if not self.viewed_by.filter(id=self.author.id).exists():
self.viewed_by.add(self.author)
return message
def __str__(self): return str(self.id)
Отношения "многие ко многим" сохраняются в отдельной таблице, с вашим первичным ключом и внешними ключами для ссылки на связанные модели (в данном случае пользователь и сообщение).
С помощью self.viewed_by.filter(id=self.author.id).exists() вы фильтруете значение этого первичного ключа. Возможно, в вашей базе данных существует отношение с тем же первичным ключом, что и у пользователя. Вам нужно отфильтровать по "user_id" или подобному свойству:
self.viewed_by.filter(user_id=self.author.id).exists()
Но, поскольку вы используете settings.AUTH_USER_MODEL, лучше всего фильтровать от пользователя через related_name:
self.author.messages_visualize.filter(message=self).exists()