【问题标题】:django How to use Q and filter related_name in this case?django 在这种情况下如何使用Q和过滤related_name?
【发布时间】:2023-03-23 23:21:02
【问题描述】:

我有一个类似的跟随模型:

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 的答案。

但我不能确定。

【问题讨论】:

    标签: django filter model


    【解决方案1】:

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

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

    User.objects.filter(<b>fuser__follow=user_john</b>).filter(<b>fuser__follow=user_mark</b>)

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

    User.objects.filter(<b>fuser__follow=user_john</b>, <b>ffollow__user=user_mark</b>)

    【讨论】:

    • 您可以在第一种情况下使用 __in 运算符
    • @JPG:这将返回Users 后面的user_john (一个,或两个)user_mark,而不是本身两者.
    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2015-11-30
    • 2017-05-16
    相关资源
    最近更新 更多