Не могу отправить сигналы пользователю - PullRequest
0 голосов
/ 26 февраля 2020

введите описание изображения здесь Я отправляю уведомления пользователю через django уведомления ... и у меня есть регулярное выражение имени пользователя, работающее на html, поэтому любой, кто отправит сообщение с @username, отправит сообщение и html можно связать, поэтому нажмите @username, чтобы перейти на страницу профиля имени пользователя h ie. Теперь я использую django сигналы, чтобы соответствовать имени пользователя и распечатать имя пользователя. но когда я использую уведомление, чтобы отправить уведомление. я не могу найти получателя (пользователя, который получит уведомление). это дает мне ошибку ValueError at /post/new/ Cannot assign "<_sre.SRE_Match object; span=(0, 4), match='@boy'>": "Notification.recipient" must be a "User" instance.

мои 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)

1 Ответ

0 голосов
/ 26 февраля 2020

recipient может не быть Match объектом:

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

Вы можете попытаться получить объект User с помощью:

if m:
    try:
        <b>recipient = User.objects.get(username=m.group('username'))</b>
    except (User.DoesNotExist, User.MultipleObjectsReturned):
        pass
    else:
        notify.send(instance.author, <b>recipient=recipient</b>, actor=instance.author, verb='tagged you', nf_type='tagged_by_one_user')
...