我只是想知道我是否有三种型号:
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
感谢您的帮助!
答案 0 :(得分:9)
你应该可以A.objects.all().prefetch_related('b__c__user')
。这将获取所有A,然后查看A中引用的所有不同B对象并获取它们,然后对B - >执行相同操作。 C,然后C - >用户。字段字符串中的双下划线运算符表示“完成此操作” - 在这种情况下,它通过b和c指定用户的路径。请注意,“b”和“c”应为小写,因为您指定的是字段名称,而不是类名。
在性能方面,select_related
超过prefetch_related
可能会更开心,除非您有特定原因要求您不希望数据库执行连接。