为了简化起见,假设这些都是Django模型:
class A():
a = manytomany('B')
class B():
b = charfield()
z = foreignkey('C')
class C():
c = charfield()
我们能不能做点这样的事来把z
块钱也拿来:
foo = A.objects.get(pk = 1).prefetch_related('a').select_related('a__z')
为了简化起见,假设这些都是Django模型:
class A():
a = manytomany('B')
class B():
b = charfield()
z = foreignkey('C')
class C():
c = charfield()
我们能不能做点这样的事来把z
块钱也拿来:
foo = A.objects.get(pk = 1).prefetch_related('a').select_related('a__z')
你只需要打一个prefetch_related
电话:
foo = A.objects.prefetch_related('a__z').get(pk=1)
这将预取两个表.在Django 1.7+中,可以通过使用Prefetch
对象来提高性能,如koniiiik's answer.