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()

Вернуться на верх