假设我设置了以下模型:
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))
注意:通过循环运行它很重要,因为我的实际代码中有很多模型,所以循环使整个事情保持干燥。我该怎么做?谢谢。
如果需要合并到来自不同模型的查询集,最好/最快的方法是使用 itertools。请记住,这会将其从QuerySet
转换为普通List
。
from itertools import chain
x = X.objects.get(pk=1)
y = Y.objects.filter(x=x)
z = Z.objects.filter(x=x)
result_list = list(chain(y, z))
据我所知,没有办法以这种方式查询两个不同的模型,即使使用 select_related
或 prefetch_related
.