django在这种情况下如何使用Q和过滤related_name?

时间:2019-12-08 14:29:13

标签: django filter model

我有一个类似的追随者模型:

class Follow(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='fuser') #who is following
    follow = models.ForeignKey(User, on_delete=models.CASCADE, related_name='ffollow') #who is followed

然后我想吸引用户关注。

案例1:我想找到user_john和user_mark都在关注的用户。

users = User.objects.filter(Q(this_user_is_followed_by=user_john)
                            & Q(this_user_is_followed_by=user_mark))

情况2:想查找紧随user_john之后但紧随user_mark之后的用户。

users = User.objects.filter(Q(there_user_is_followed_by=user_john)
                            & Q(these_user_are_following=user_mark))

该如何进行过滤?太难了。

users = User.objects.filter(Q(ffollow__user=user)
                            & Q(ffollow__user=user_who_read))

将回答案例1。

但是我不确定。

1 个答案:

答案 0 :(得分:5)

  

案例1:我想找到user_johnuser_mark都在关注的用户。

第一种情况应使用两个过滤器解决,因为否则,您将过滤与 same 相关的对象:

User.objects.filter(fuser__follow=user_john).filter(fuser__follow=user_mark)
  

情况2:想查找紧随user_john却紧追user_mark的用户。

User.objects.filter(fuser__follow=user_john, ffollow__user=user_mark)