我正在尝试打印出用户所属的所有群组的列表。嵌套在每个组中的将是该组中所有其他用户的列表。
user = self.request.user
groups = Group.objects.filter(user=user)
people = User.objects.filter(groups__in=groups).exclude(pk=user.pk)
但这只是给了我一个用户列表,我希望它们尽可能有效地按组分组。
我也可以这样做:
groups = Group.objects.filter(user=user)
for group in groups:
people = group.user_set.exclude(pk=user.pk)
但我觉得这样做的查询太多了(每组一个?)
所以,这似乎可能是这样做的方式:
groups = self.user.groups.prefetch_related('user_set')
for group in groups:
print(group)
print(group.user_set.exclude(pk=user.pk)
我只是想确保exclude语句没有进行另一个查询,如果是,我可以将它添加到预取中。
嗯,在查看db.connection.queries
之后,我确实看到了对排除的额外查询。有可能以某种方式预取吗?