Django发出注释通知信号

问题描述

我正在从事django项目,并且我写了post_save信号以在发表评论通知帖子作者。现在,我想添加一个post_save信号,以通知帖子作者和评论用户进行了评论回复)。我该如何处理?这是因为我的评论模型上存在父子关系。

下面是我的型号和信号代码。有人可以帮忙吗?我是django的新手,刚刚开始学习django信号。

class Comment(models.Model):
    user = models.ForeignKey('auth.User',on_delete=models.CASCADE)
    post = models.ForeignKey('forum.Post',related_name='comments',on_delete=models.CASCADE)
    reply = models.ForeignKey('self',null=True,blank=True,related_name='replies',on_delete=models.CASCADE)
    text = models.TextField(max_length=250,blank=True)


@receiver(post_save,sender=Comment)
def user_comment_post(sender,instance,created,**kwargs):
    if created:
        comment = instance
        post = comment.post
        #reply = comment.reply
        text_preview = comment.text[:90]
        sender = comment.user
        notify = Notification.objects.create(post=post,sender=sender,comment=comment,user=post.author,text_preview=text_preview,notification_type=2)
        notify.save()

解决方法

如果要保存的评论是答复,则可以通过访问其相关管理器执行EXISTS查询来签入相同的post_save钩子:

x = self.fc1.__call__(x)
,

根据模型结构:

  • 指向Comment的新Post对象的Comment.reply字段None
  • 对现有Comment对象的回复(另一个Comment对象)将有Comment.reply 不如None 。将有一个父级{ {1}}个对象。

因此,请检查信号实例是否为Comment

  • comment.reply is None是对帖子的新评论>>>仅向帖子所有者发送通知
  • if comment.reply is None是对帖子的现有评论的新评论(回复)>>>向帖子所有者和评论所有者发送通知
if comment.reply is not None