首页 > 解决方案 > Django Signals 如何允许未经身份验证的用户发表评论?

问题描述

我正在尝试创建一个通知系统,如果在他的博客文章中发布任何新评论,它将通知作者。如果用户未登录并尝试发表评论,我会收到此错误。

Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x0000017B3D819CA0>>": "BlogComment.user" must be a "User" instance. 

这是我的代码:

通知模型.py

class Notifications(models.Model):
    blog = models.ForeignKey('blog.Blog',on_delete=models.CASCADE)
    NOTIFICATION_TYPES = ((1,'Like'),(2,'Comment'), (3,'Follow'))
    sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="noti_from_user")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="noti_to_user")
    notification_type = models.IntegerField(choices=NOTIFICATION_TYPES)
  

评论models.py

class BlogComment(models.Model):
      blog = models.ForeignKey(Blog,on_delete=models.CASCADE,null=True, blank=True)
      user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_comment',blank=True,null=True)
      def user_comment(sender, instance, *args, **kwargs):
        comment= instance
        blog = comment.blog
        sender = comment.user
        notify = Notifications(blog=blog, sender=sender, user=blog.author, notification_type=2)
        notify.save()
      
      
post_save.connect(BlogComment.user_comment, sender=BlogComment)  
  

视图.py:

if request.method == "POST":
       if comment_form.is_valid():
                isinstance = comment_form.save(commit=False)
                isinstance.user = request.user
                isinstance.blog = blog
                isinstance.save()

如何允许未经身份验证的用户发表评论?

标签: django

解决方案


推荐阅读