根据文档,当这些关系与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
答案 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