【问题标题】:Is it possible to prefetch_related over multiple levels?是否可以在多个级别上进行 prefetch_related ?
【发布时间】:2015-03-04 22:01:05
【问题描述】:

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

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

感谢您的帮助!

【问题讨论】:

    标签: django django-models django-1.7 django-queryset


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2018-05-08
      • 2012-09-25
      • 2019-10-17
      • 2017-06-11
      • 1970-01-01
      相关资源
      最近更新 更多