我在trunk中尝试过django 1.4中的prefetch_related(),无法进行预取反向查找。
我的简化模型(每本书都有很多价格):
class Book(models.Model):
# some fields
class Price(models.Model):
book = models.ForeignKey(Book)
我的观点查询:
books = Book.objects.prefetch_related('price')
然后,我收到了AttributeError消息:
AttributeError: Cannot find 'price' on Book object, 'price' is an invalid parameter to prefetch_related()
如何让它发挥作用? 感谢。
答案 0 :(得分:79)
定义相关名称:
class Price(models.Model):
book = models.ForeignKey(Book, related_name='prices')
然后使用它:
books = Book.objects.prefetch_related('prices')
答案 1 :(得分:10)
如果没有为关系定义_set
,则反向关系会附加some_book.price_set.all()
。从对象访问反向关系时就是这种情况(例如prefetch_related
),但这也适用于books = Book.objects.prefetch_related('price_set')
:
_set
请注意,这似乎与过滤器不同,过滤器 接受没有Books.objects.filter(price__currency='EUR')
的其他模型的名称(例如related_name
)。
以上是用1.11.8测试的(不是这个特定代码,而是我自己的类似代码)。
或者,您可以添加change
,如上面的JanPöschko所示。