如果模型A具有指向模型B的外键,如何使用模型B中的某些条件从模型B预取模型A?
这正是我想要的(OuterRef显然只能在SubQuery中工作,但这基本上是我需要的功能):
class ModelA(models.Model):
somecriteria = models.CharField()
class ModelB(models.Model):
somerelation = models.ForeignKey(ModelA)
someattribute = models.CharField()
qs = ModelA.objects.all()
qs = qs.prefetch_related(
Prefetch(
'modelb_set',
queryset=ModelB.objects.filter(someattribute=OuterRef('somecriteria')),
to_attr='some_attr'
),
)
查询应该执行以下操作(在较少的查询中):
for obj in qs:
# Change this to new_qs = obj.some_attr if prefetch is working.
newqs = obj.modelb_set.filter(someattribute=obj.somecriteria)
if newqs.exists():
# Do something
1条答案
按热度按时间gab6jxml1#
这只会产生2个查询,如果你在循环中插入一个filter(),你将产生N(O^2)个查询...不好。
我写了一个测试来证明这一点,只做2个查询,你可以在这里找到它:
https://gist.github.com/kingbuzzman/fd2b635f2cf011f1330a6be088ce3664#file-modelabquery-py-L125