django 在这种情况下如何使用 Q 和过滤相关名称?

tou*_*ist 1 django model filter

我有一个像这样的跟随模型:

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
Run Code Online (Sandbox Code Playgroud)

然后我想通过关注来获得用户。

案例 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))
Run Code Online (Sandbox Code Playgroud)

案例2:想找user_john关注的用户,但是关注user_mark的用户。

users = User.objects.filter(Q(there_user_is_followed_by=user_john)
                            & Q(these_user_are_following=user_mark))
Run Code Online (Sandbox Code Playgroud)

那个过滤器怎么做?太难了。

users = User.objects.filter(Q(ffollow__user=user)
                            & Q(ffollow__user=user_who_read))
Run Code Online (Sandbox Code Playgroud)

将回答 Case1。

但我不能确定。

Wil*_*sem 5

案例1:我想找到用户user_john,并user_mark都以下。

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

User.objects.filter(fuser__follow=user_john).filter(fuser__follow=user_mark)
Run Code Online (Sandbox Code Playgroud)

案例2:想找到关注了user_john,但是关注了的用户user_mark

User.objects.filter(fuser__follow=user_john, ffollow__user=user_mark)
Run Code Online (Sandbox Code Playgroud)

  • @JPG:这将返回`user_john`之后的`User`*或*(一个或两个)`user_mark`,而不是本身*两个*。 (3认同)