【发布时间】:2019-04-07 21:51:27
【问题描述】:
假设我有以下模型设置:
class X(models.Model):
...
class Y(models.Model):
x = models.ForeignKey(X)
class Z(models.Model):
x = models.ForeignKey(X)
现在,在一个方法中,我想获取与给定X 对象相关的所有Y 对象和Z 对象。我想访问我的数据库一次,然后返回一个组合查询集。现在,我正在这样做:
x = X.objects.get(pk=1)
queryset = []
for cls in [Y, Z]:
queryset += list(cls.objects.filter(x=x))
注意:通过循环运行它很重要,因为在我的实际代码中有很多模型,所以循环使整个事情保持干燥。我怎样才能做到这一点?谢谢。
【问题讨论】:
-
@Pedro 您能否将您的评论扩展为使用我的型号名称的代码示例的答案?
-
我的错,你不能用反向外键做
select_related。可以使用prefetch_related,但是会多次命中数据库:docs.djangoproject.com/en/dev/ref/models/querysets/…