'用户'对象没有属性' get_affected_users' //关于foreignkey关系

时间:2016-02-28 05:56:45

标签: python django

我知道错误意味着什么,我知道为什么会发生这种情况。但我不知道如何解决它并实现我的目标。这就是我正在做的事情。

发布内容的用户需要在其他用户发帖评论该内容时收到通知。我能够做到"通知评论的人何时回复该评论"。所以,我想我会为我遇到的问题做同样的事情。但我得到了上述错误。这是我的代码。

models.py发表评论

class Comment(models.Model):
    user = models.ForeignKey(MyProfile)
    parent = models.ForeignKey("self", null=True, blank=True)
    post = models.ForeignKey(Post, null=True, blank=True, related_name="commented_post")
    @property 
    def get_origin(self):
        return self.path

    @property
    def get_comment(self):
        return self.text

    @property
    def is_child(self):
        if self.parent is not None:
            return True
        else:
            return False

    def get_children(self):
        if self.is_child:
            return None
        else:
            return Comment.objects.filter(parent=self)

    def get_affected_users(self):
        """ 
        it needs to be a parent and have children, 
        the children, in effect, are the affected users.
        """
        comment_children = self.get_children()
        if comment_children is not None:
            users = []
            for comment in comment_children:
                if comment.user in users:
                    pass
                else:
                    users.append(comment.user)
            return users
        return None

get_affected_user函数允许哪个用户获取通知。 (创建回复的人不应该收到通知,得到回复的人应该收到通知)。

在我的views.py

def comment_create_view(request):

    form = CommentForm(request.POST)
    if form.is_valid():
        comment_text = form.cleaned_data['comment']
        if parent_comment is not None:
            # parent comments exists
            new_comment = Comment.objects.create_comment(
                user=MyProfile.objects.get(user=request.user),
                path=parent_comment.get_origin, 
                text=comment_text,
                post = post,
                parent=parent_comment
                )
            affected_users = parent_comment.get_affected_users()
            notify.send(
                    MyProfile.objects.get(user=request.user), 
                    action=new_comment, 
                    target=parent_comment, 
                    recipient=parent_comment.user,
                    affected_users = affected_users,
                    verb='replied to')
        #the above code gives reply-comment notification makes possible, the below code is the one I'm struggling
        else:
            new_comment = Comment.objects.create_comment(
                user=MyProfile.objects.get(user=request.user),
                path=origin_path, 
                text=comment_text,
                post = post
                )

这一行导致了这个问题,可能是因为我在Post模型中没有get_affected_user功能,但在评论模型中我有post字段,其中有一个带有Post的外键。所以在技术上我不能使用这个功能吗?

            affected_users = [post.moderator.get_affected_users()]
            notify.send(
                    MyProfile.objects.get(user=request.user), 
                    recipient = MyProfile.objects.get(user=request.user), 
                    action=new_comment, 
                    target = new_comment.post,
                    affected_users = affected_users,
                    verb='commented on')

我在评论中有get_affected_users,而在评论中我发帖与Post有postKey关系,在帖子中我有版主。所以我想我可以get_affected_users使用post.moderator ......但我猜不是,我该怎么做呢?

如果问题不清楚,请原谅。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我将假设Post.moderator与MyProfile的FK与Comment.user相同。其次,我猜你正在尝试做的是在Post对象上创建新的顶级注释或没有设置parent的注释时通知主持人。在这种情况下,您的行应该只是affected_users = [post.moderator]