是否有可能在多个级别上prefetch_related?

Jas*_*nTS 4 django django-models django-queryset django-1.7

我只是想知道我是否有三个型号:

class A(models.Model:
  b = models.ForeignKeyField('B')
class B(models.Model):
  c = models.ForeignKeyField('C')
class C(models.Model):
  user = models.ForeignKeyField('auth.User')
Run Code Online (Sandbox Code Playgroud)

我在A的列表视图中:

foo = A.objects.all().prefetch_related('B')
Run Code Online (Sandbox Code Playgroud)

有没有办法让它预取C(然后'auth.User')?

我正在使用Django 1.7

谢谢你的帮助!

And*_*ter 9

你应该能做到的A.objects.all().prefetch_related('b__c__user').这将获取所有A,然后查看A中引用的所有不同B对象并获取它们,然后对B - > C执行相同操作,然后对C - > User执行相同操作.字段字符串中的双下划线运算符表示"完成此操作" - 在这种情况下,它通过b和c指定用户的路径.请注意,"b"和"c"应为小写,因为您指定的是字段名称,而不是类名称.

性能方面,你可能会更快乐select_relatedprefetch_related,除非你有特殊原因,为什么你不想让你的数据库做连接.