是否可以 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
,除非您有特定的原因不想让数据库执行连接。
我只是想知道我是否有三个模型:
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
,除非您有特定的原因不想让数据库执行连接。