反向select_related为onetoone字段不起作用

时间:2014-03-04 16:30:54

标签: django

根据文档,当这些关系与select_related()接口时,你应该能够捕获反向关系。但是它没有用,所以我可能会缺少什么?

我的班级看起来像这样:

class MainPage(models.Model):
    book = models.OneToOneField(Book, primary_key=True)
    text = models.TextField(blank=True)

我可以做得很好:

book = Book.objects.get(id=book_id, active=True)
main_page = book.mainpage

但这样做不会降低数据库调用:

book = Book.objects.select_related('mainpage').get(id=book_id, active=True)
main_page = book.mainpage

1 个答案:

答案 0 :(得分:1)

我猜你打算只打一个sql查询(使用一对一的连接)。这可能对此有用:

book = Book.objects.get(mainpage__book_id=book_id, active=True)

修改

您问题中的查询不起作用,因为select_related仅适用于查询集,而.get返回实例对象。因此,这应该工作:

book = Book.objects.select_related('mainpage').filter(id=book_id, active=True)[0]
main_page = book.mainpage