我在主干上尝试了Django1.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()如何让它工作?谢谢。
发布于 2012-02-07 20:44:26
定义相关名称:
class Price(models.Model):
book = models.ForeignKey(Book, related_name='prices')然后使用它:
books = Book.objects.prefetch_related('prices')发布于 2018-02-16 03:22:59
当您没有为关系定义related_name时,反向关系会附加_set。这是从对象(例如some_book.price_set.all())访问反向关系时的情况,但这也适用于prefetch_related
books = Book.objects.prefetch_related('price_set')请注意,这似乎与filter不同,filter接受不带_set的其他模型的名称(例如Books.objects.filter(price__currency='EUR'))。
上面的代码是用1.11.8测试的(不是在这个特定的代码上,而是在我自己的类似代码上)。
或者,您可以添加一个related_name,如Jan Pöschko所示。
https://stackoverflow.com/questions/9176430
复制相似问题