是否可以 prefetch_related 跨越多个级别?

Is it possible to prefetch_related over multiple levels?

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

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')

我在 A 的列表视图中:

foo = A.objects.all().prefetch_related('B')

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

我正在使用 Django 1.7

感谢您的帮助!

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

在性能方面,您可能更喜欢 select_related 而不是 prefetch_related,除非您有特定的原因不想让数据库执行连接。