我有一个用Django构建的Q&A类型的站点,具有以下模型:

class Question(models.Model):
    title = models.CharField(max_length=70)
    details = models.TextField()

class Answer(models.Model):
    question_id = IntegerField()
    details = models.TextField()

我需要显示特定问题及其答案.通常,我需要2个查询才能做到这一点:

Question.objects.get(id=1)
Answer.objects.get(question_id=1)[:10]

我希望使用一个查询检索所有内容.在MySQL中,它将是:

SELECT *
FROM Question JOIN Answer ON Question.id=Answer.question_id
WHERE Question.id=1
LIMIT 10

有没有什么办法我可以通过Django 的ORM来做这件事? 在这种情况下extra()会有帮助吗?

推荐答案

这正是select_related()的作用.唯一的问题是

answers = Answer.objects.filter(question_id=1).select_related() 

现在每个Answer对象都有一个预取的"Quest"属性,并且 访问它不会再次命中数据库.

Django相关问答推荐

如何在Django模板中获取组中对象的整体计数器(&Q;)?

如何显示;Django认证系统;在模板中?

Django通用列表视图与多查询搜索

来自日历的 Django 动态 url

只从查询集中获取某种类型的最新项目

如何在 ModelViewSet 逻辑中读取查询字符串值?

Django ORM:获取每个类别的月平均价格

在 python 视图中检测移动浏览器

变量为无时默认模板标签输出的Django设置?

如何在不使用 sudo 的情况下安装 virtualenv?

django 复数模板

如何验证对象是否存在于多线程中

获取 Django 表单中的错误列表

django:manytomanyfield 和 through 如何出现在 admin 中?

django post_save 更新信号

Django中的自定义排序

显式 cursor.close() 的必要性

django 应用基于条件的样式类

AttributeError:ManyRelatedManager对象没有add属性?

django/文件上传权限