在 django 中,对于用户,获取 ForeignKey 到组 he/she 所属的所有对象(高效)

In django, for a user, get all objects which ForeignKey to groups he/she belongs to (efficiently)

我有 3 个模型,用户、组和考试:

from django.db import models
from django.contrib.auth.models import User, Group

class Exam(models.Model):
    # a lot of fields
    solutions_group = models.ForeignKey(Group)

对于模型 User 的实例 user,我想获取 solutions_group user 所属的所有 Exam

这是我想到的:

exam_list = []
for group in user.groups.all():
    exam_list+= list(group.exam_set.all())

但这涉及到多个数据库查询。

有没有更好的方法来执行此操作,涉及更少的查询?

我正在使用 Python 3.4 和 Django 1.8。

尝试使用 "in" filter

Exam.objects 上进行过滤
user_groups = user.groups.all()
user_exams = Exam.objects.filter(solutions_group__in=user_groups)

我认为您还可以使用 related_name 从组到用户 (user_set) 使用以下查询:

user_exams = Exam.objects.filter(solutions_group__user_set=user)