热门标签:
Q:

Django用户关注取消关注查询

我正在创建一个博客文章应用程序,我的一个要求是用户可以相互关注和取消关注。 我为每个用户创建了一个profile model class,其中我使用多对多字段将following列添加到user model中。

人物简介模型->

class People(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    following = models.ManyToManyField(to=User, related_name='following', blank=True)
    photo = models.ImageField(upload_to='profile_pics', blank=True,null=True)
    Phone_number = models.CharField(max_length=255,null=True,blank=True)
    Birth_Date = models.DateField(null=True,blank=True)
    Created_date = models.DateTimeField(auto_now_add=True)
    Updated_date = models.DateTimeField(auto_now=True)

现在我列出了一个网页上的所有帖子,每个帖子的作者也在模板上提到。 要求是我需要给一个按钮来关注或取消关注帖子作者。 现在,如果用户第一次出现在页面上,如果帖子的作者已经遵循,我需要显示一个取消关注按钮,为此我需要检查每个帖子作者的跟随,并根据DB的响应对我的模板进行更改。

这是我写的查询->

posts =  Post.objects.exclude(users=request.user)\
    .select_related('user__people','ProductAvailability').prefetch_related('images_set','Likes')\
    .annotate(comments_Count = Count('comments_post',distinct=True)).annotate(
        Count('Likes',distinct=True),is_liked=Exists(
        Post.Likes.through.objects.filter(
            post_id=OuterRef('pk'), user_id=user_id
        )
    ),isSaved=Exists(
        Post.favourites.through.objects.filter(
            post_id=OuterRef('pk'), user_id=user_id
        )),
        isFollowed=Exists(
            People.following.through.objects.filter(
                people_id=OuterRef('pk'), user_id=user_id
            )
        )
    ).all().order_by('-id')

现在DB显示了带有people_id = 3people_id = 3的记录,即用户1跟随id为3的人。 但是上面的查询在isFollowed中返回0作为输出。

有人可以指出我犯的错误。

原网址
A:

你可以检查是否有一个People对象的asuser_idtheuser_id和我们在哪里followingaUser写了这个帖子:

posts = Post.objects.exclude(users=request.user).select_related(
    'user__people','ProductAvailability'
).prefetch_related('images_set','Likes').annotate(
    isFollowed=Exists(
        People.objects.filter(
            following__post__id=OuterRef('pk'), user_id=user_id
        )
    )
).order_by('-id')

相似问题