首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django: prefetch_related()是否遵循反向关系查找?

问Django: prefetch_related()是否遵循反向关系查找?
EN

Stack Overflow用户
提问于 2012-02-07 20:39:29
回答 2查看 35.4K关注 0票数 67

我在主干上尝试了Django1.4中的prefetch_related(),但是不能进行预取反向查找。

我的简化模型(每本书都有很多价格):

代码语言:javascript
复制
class Book(models.Model):
    # some fields

class Price(models.Model):
    book = models.ForeignKey(Book)

我的视图的查询:

代码语言:javascript
复制
books = Book.objects.prefetch_related('price')

然后,我收到了AttributeError消息:

代码语言:javascript
复制
AttributeError: Cannot find 'price' on Book object, 'price' is an invalid parameter to prefetch_related()

如何让它工作?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 20:44:26

定义相关名称:

代码语言:javascript
复制
class Price(models.Model):
    book = models.ForeignKey(Book, related_name='prices')

然后使用它:

代码语言:javascript
复制
books = Book.objects.prefetch_related('prices')
票数 98
EN

Stack Overflow用户

发布于 2018-02-16 03:22:59

当您没有为关系定义related_name时,反向关系会附加_set。这是从对象(例如some_book.price_set.all())访问反向关系时的情况,但这也适用于prefetch_related

代码语言:javascript
复制
books = Book.objects.prefetch_related('price_set')

请注意,这似乎与filter不同,filter接受不带_set的其他模型的名称(例如Books.objects.filter(price__currency='EUR'))。

上面的代码是用1.11.8测试的(不是在这个特定的代码上,而是在我自己的类似代码上)。

或者,您可以添加一个related_name,如Jan Pöschko所示。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9176430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档