如何进行嵌套的Django SELECT?
class Friendship(models.Model):
from_friend = models.ForeignKey(User, related_name='friend_set')
to_friend = models.ForeignKey(User, related_name='to_friend_set')
我想要选择所有的to_friends,这些to_friends的from_friend是某个特定的用户。
然后,我想把这些to_friends传递给另一个.filter()里面的filter。这样做可以吗?
谢谢!
3 个回答
2
这段代码看起来能得到我们想要的结果。
User.objects.filter(to_friend_set__from_friend=1)
3
我想要选择所有的
to_friends
,这些朋友的from_friend
是某个特定的用户。
你可以通过下面的方式获取所有的友情对象:
friendships = Friendship.objects.filter(from_friend=some_user)
然后,你可以使用查询集的 values_list
方法,把所有的 to_friend
字段放到一个简单的列表里:
friends = friendships.values_list("to_friend", flat=True)
到这一步,friends
是一个 ValuesListQuery
对象,它的用法和列表一样。你可以遍历这些朋友,并在其他的 filter()
调用中使用这些值。
2
正如pccardune所说,你可以这样获取相关的用户:
friendships = Friendship.objects.filter(from_friend=some_user)
但实际上,你可以直接把这个结果放到你下一个查询中:
second_select = Whatever.objects.filter(friend__in=friendships)