Сигналы Django как уведомить пользователя о новом ответе?

Прямо сейчас мой автор получает уведомления через сигналы, если кто-то ответил или прокомментировал. Давайте немного объясним вам эту строку кода

if instance.user.id != instance.blog.author.id: срабатывает только если пользователь не является автором блога. вот мой код:

models.py

class BlogComment(models.Model):
      blog = models.ForeignKey(Blog,on_delete=models.CASCADE,blank=True,null=True)
      user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,blank=True,null=True) 



@receiver(post_save,sender=BlogComment)
def NotiFicationSignals(instance,created,**kwargs):
    if created:
             if instance.user.id != instance.blog.author.id: #notifiy author 
                 noti_to_author = Notifications.objects.create(duplicate_value="author",sender=instance.user,receiver=instance.blog.author,text_preview=f"Recived new comment from {instance.user}")
          

Теперь я хочу создать объект уведомления для комментатора, если на его комментарий добавлен какой-либо ответ.

добавьте необязательное поле reply_to foreign_key к вашему комментарию в блоге, например:

reply_to= models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="replies_to_me", blank=True,null=True) 

тогда сделайте это в ваших сигналах

noti_to_commenter = Notifications.objects.create(duplicate_value="author",sender=instance.user,receiver=instance.reply_to,text_preview=f"Recived new comment from {instance.user}")

Как-то нужно отслеживать родительский комментарий (начальный комментарий, на который можно ответить). Я могу предложить один способ, основанный на приведенной вами схеме модели:

Вы можете добавить поле parent_comment в модель BlogComment. Это поле может быть пустым для родительского комментария, но вы должны установить это поле для дочерних или ответных комментариев. Это поле будет указывать на родительскую модель BlogComment, и вы сможете извлекать информацию о пользователе из этого поля.

В этом сценарии ваш код будет выглядеть следующим образом:

class BlogComment(models.Model):
  blog = models.ForeignKey(Blog,on_delete=models.CASCADE,blank=True,null=True)
  user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,blank=True,null=True) 
  parent_comment = models.ForeignKey('self', on_delete=models.CASCADE,blank=True,null=True) 

@receiver(post_save,sender=BlogComment)
def NotiFicationSignals(instance,created,**kwargs):
    if created:
             if instance.user.id != instance.blog.author.id: #notify author 
                 noti_to_author = Notifications.objects.create(duplicate_value="author",sender=instance.user,receiver=instance.blog.author,text_preview=f"Recived new comment from {instance.user}")
             if instance.parent_comment: # notify to parent commenter 
                 noti_to_parent_commenter = Notifications.objects.create(duplicate_value="parent commenter",sender=instance.user,receiver=instance.parent_comment.user,text_preview=f"Recived new comment from {instance.user}")
      

Подобная структура базы данных предложена в этой теме Схема базы данных сообщений, комментариев, ответов и лайков

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