Django models Can';不要向用户发送信号

Django models Can';不要向用户发送信号,django-models,django-signals,Django Models,Django Signals,我正在通过django通知向用户发送通知。。我有username regex处理html,因此任何人都可以使用@username it wil post发布,并且html是可链接的,因此单击@username it将把hie带到username配置文件页面。现在我使用django信号匹配用户名并打印出用户名。但是当我使用notify发送通知时。我找不到收件人(将收到通知的用户)。它给了我一个错误ValueError at/post/new/ 无法分配“”:“Notification.recipi

我正在通过django通知向用户发送通知。。我有username regex处理html,因此任何人都可以使用@username it wil post发布,并且html是可链接的,因此单击@username it将把hie带到username配置文件页面。现在我使用django信号匹配用户名并打印出用户名。但是当我使用notify发送通知时。我找不到收件人(将收到通知的用户)。它给了我一个错误
ValueError at/post/new/
无法分配“”:“Notification.recipient”必须是“用户”实例。

my 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)
class post(models.Model):
parent=models.ForeignKey(“self”,on_delete=models.CASCADE,blank=True,null=True)
title=models.CharField(最大长度=100)
image=models.ImageField(上传到class='post_pics',null=True,blank=True)
video=models.FileField(上传到class='post\u videos',null=True,blank=True)
content=models.TextField()
likes=models.ManyToManyField(用户,相关的_name='likes',blank=True)
发布日期=models.DateTimeField(默认值=时区.now)
author=models.ForeignKey(用户,on_delete=models.CASCADE)
objects=postManager()
定义(自我):
返回自己的标题
类元:
订购=['-发布日期','标题']
def get_绝对_url(自身):
返回反向('blog-home')
def total_likes(自我):
return self.likes.count()
def post_save_接收方(发送方、实例、已创建、*args、**kwargs):
如果已创建而不是instance.parent:
用户_regex=r'@(?P[\w.@+-]+)'
m=re.search(user\u regex,instance.content)
如果m:
用户名=m.group(“用户名”)
notify.send(instance.author,recipient=m,actor=instance.author,verb='taged you',nf_type='taged_by_one_user')
post_save.connect(post_save_接收方,发送方=post)

收件人不能是匹配的对象:

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

还有一个问题:我的项目目录中有通知URL。但是我得到了一些关于url的错误。我指的是mysites url(用于通知,因为我使用的是django notifiactions):`re_path(“^inbox/notifications/”,include(notifications.url,namespace='notifications'),`以及我在navbnar中链接url的my base.html:``错误显示未找到'反向通知'。`@WilleMVANONSEM由于它有一个名称空间,所以很可能是
{%url'通知:通知“%}
。但是冒号后面的部分取决于通知中的特定视图。在回答中,如果我键入多个用户名,它会给我一个用户名。如果它们被标记,则发送相同的信号。我想用findall代替搜索。这样行吗@WillemVanOnsem@Cavinblake:通常是的。当然,您需要迭代匹配项。嗨。还有一件事,我告诉过你,信号只对一个用户有效。如果我使用两个或三个用户名,它只向第一个用户名发送信号,其他两个用户根本没有收到任何信号。特别是当我只输入一个用户名时,它会向该用户名发送信号,但如果输入两个或三个用户名(username),它只会向第一个用户名发送信号,而不会向其他用户名发送信号。
if m:
    try:
        recipient = User.objects.get(username=m.group('username'))
    except (User.DoesNotExist, User.MultipleObjectsReturned):
        pass
    else:
        notify.send(instance.author, recipient=recipient, actor=instance.author, verb='tagged you', nf_type='tagged_by_one_user')