可以说我有以下模型设置:
class X(models.Model):
...
class Y(models.Model):
x = models.ForeignKey(X)
class Z(models.Model):
x = models.ForeignKey(X)
现在,在一种方法中,我想获取与给定Y
对象相关的所有Z
对象和X
对象。我想打一次我的数据库,并返回一个组合的查询集。现在,我正在这样做:
x = X.objects.get(pk=1)
queryset = []
for cls in [Y, Z]:
queryset += list(cls.objects.filter(x=x))
注意:通过循环运行它很重要,因为在我的实际代码中有很多模型,因此循环使整个过程保持干燥。我怎样才能做到这一点?谢谢。
答案 0 :(得分:1)
如果您需要合并到不同模型的查询集,最好/最快的方法是使用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
,也无法以这种方式查询两个不同的模型。