在 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)
我有 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)