【问题标题】:can't send signals to a specific user无法向特定用户发送信号
【发布时间】:2020-03-04 15:35:31
【问题描述】:

我正在通过 django 通知向用户发送通知。而且我有用户名正则表达式在 html 上工作,因此任何使用 @username 的 cmet 都会发布并且 html 是可链接的,因此单击 @username 它将带他到用户名配置文件页面。现在我正在使用 django 信号来匹配用户名并打印出用户名。但是当我使用通知发送通知时。这没用。 模型.py:

class Comment(models.Model):
post = models.ForeignKey(post, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(User, on_delete=models.CASCADE)
reply = models.ForeignKey('Comment', null=True, related_name='replies', on_delete=models.CASCADE)
content = models.TextField()
image = models.ImageField(upload_to='comments-pics', null=True, blank=True)
voice_record = models.FileField(upload_to='voice-comments', null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)

def __str__ (self):
    return '{}.{}'.format(self.post.title, str(self.user.username))


def save(self, *args, **kwargs):
    super(Comment, self).save(*args, **kwargs)


def Comment_save_receiver(sender, instance, created, *args,**kwargs):
    if created and not instance.parent:
    user_regex = r'@(?P<username>[\w.@+-]+)'
    m = re.search(user_regex, instance.content)
    if m:
        try:
            recipient = User.objects.get(username=m.group('username'))
        except (User.DoesNotExist, User.MultipleObjectsReturned):
            pass
        else:
            notify.send(instance.user, recipient=recipient, actor=instance.user, verb='mention you in a post', target=instance, nf_type='tagged_by_one_user')

post_save.connect(Comment_save_receiver, sender=post)

【问题讨论】:

  • 请提供更多关于它不起作用的信息。您尝试过什么,您期望发生什么以及实际发生了什么?你有任何额外的调试上下文吗?
  • 请更正您的缩进以完全匹配您的代码中的内容。这可能会给您带来问题,现在很难说。
  • 先生,它应该向用户发送通知,就像用户在 cmets 中提及用户一样
  • 如果有人喜欢或发表评论,我正在使用 django 通知向用户发送通知..它会通知他们..并且评论表单采用 ajax 表单方法..所以我无法获得实际错误
  • 如果发生任何错误,它会阻止表单提交..但它没有收到任何错误。我的实例有问题。

标签: django django-models


【解决方案1】:

问题已解决。我在信号部分做错了。它将是:

def comment_save_receiver(sender, instance, created, *args,**kwargs):
if created:
user_regex = r'@(?P<username>[\w.@+-]+)'
m = re.search(user_regex, instance.content)
if m:
    try:
        recipient = User.objects.get(username=m.group('username'))
    except (User.DoesNotExist, User.MultipleObjectsReturned):
        pass
    else:
        notify.send(instance.user, recipient=recipient, actor=instance.user, verb='mention you in a post', target=instance.post, nf_type='tagged_by_one_user')

post_save.connect(comment_save_receiver, sender=Comment)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多