django 在这种情况下如何使用Q和过滤related_name?
Posted
技术标签:
【中文标题】django 在这种情况下如何使用Q和过滤related_name?【英文标题】:django How to use Q and filter related_name in this case? 【发布时间】:2020-04-01 19:40:17 【问题描述】:我有一个类似的跟随模型:
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】:案例1:我想找到
user_john
和user_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:这将返回User
s 后面的user_john
或(一个,或两个)user_mark
,而不是本身两者.以上是关于django 在这种情况下如何使用Q和过滤related_name?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery & Django:在这种情况下如何正确使用 jquery