【问题标题】:Getting all users and use them for the recipient in django获取所有用户并将它们用于 django 中的收件人
【发布时间】:2021-07-01 04:27:08
【问题描述】:

我正在通过 Django 通知向用户发送通知,并且我在 HTML 上使用了用户名正则表达式,因此任何使用@username 发布的人都会发布,并且 HTML 是可链接的,因此单击 @username 它将把任何人带到用户名个人资料页面。现在我使用 Django 信号来匹配用户名并打印出用户名。当我使用两个或三个@username 时,通知只会发送给一个@username,其他两个@username 不会收到通知。

Models.py-

class post(models.Model):
parent = models.ForeignKey("self", on_delete=models.CASCADE, blank=True, null=True)
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='post_pics', null=True, blank=True)
video = models.FileField(upload_to='post_videos', null=True, blank=True)
content = models.TextField()
likes = models.ManyToManyField(User, related_name='likes', blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)

objects = postManager()

def __str__(self):
    return self.title

class Meta:
    ordering = ['-date_posted', 'title']

def get_absolute_url(self):
    return reverse ('blog-home')

def total_likes(self):
    return self.likes.count()


def post_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:
        username = m.group("username")

        notify.send(instance.author, recipient=m, actor=instance.author, verb='tagged you', 
nf_type='tagged_by_one_user')

post_save.connect(post_save_receiver, sender=post)

【问题讨论】:

  • 您正在使用django-notifications 应用程序?
  • 是的,向他们发送通知。这是一个很好的图书馆。

标签: django django-models django-signals


【解决方案1】:

您需要检查用于用户列表的变量“m”,我认为您那里只有一个用户。 您可以通过在 *args 或 **kwargs 中发送所有用户 ID 来简单地做到这一点。然后获取所有用户并将其用作收件人。

【讨论】:

  • 是的,我只有一个用户。如何将所有 user_id 发送到 *args 或 *kwargs 以获取所有用户。一个示例代码会很棒。
  • 我之前用过 args 和 kwargs
猜你喜欢
  • 2018-04-17
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多