为了简化起见,假设这些都是Django模型:

class A():

    a = manytomany('B')

class B():

    b = charfield()
    z = foreignkey('C')

class C():

    c = charfield()

我们能不能做点这样的事来把z块钱也拿来:

foo = A.objects.get(pk = 1).prefetch_related('a').select_related('a__z')

推荐答案

你只需要打一个prefetch_related电话:

foo = A.objects.prefetch_related('a__z').get(pk=1)

这将预取两个表.在Django 1.7+中,可以通过使用Prefetch对象来提高性能,如koniiiik's answer.

Django相关问答推荐

如何在Django中将可选参数传递给视图?

如何从Django';S模型中的方法中检索值?

在Django中提交表单后更改模型数据

当前路径 **/POST 与其中任何一个都不匹配

django 无法识别实现自定义后端

如何使用来自另一个字段的信息创建字段

基于令牌的身份验证如何工作?

Pytest-django - 测试创建和传递所需的用户对象

如何在 gunicorn conf 文件中指定 uvicorn 工作人员

Django REST Framework 图片上传

Django基于类的视图上的success_url的反向抱怨循环导入

未捕获的类型错误:$(...).datepicker is not a function(anonymous function)

如何从不是 django 元素文件夹的文件夹中运行 gunicorn

django-object-permissions Vs django-guardian Vs django-authority

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

引发 404 并继续 URL 链

在 Django shell 启动时自动导入模型

Django unique_together 与可为空的 ForeignKey

具有 2 种语言的 Django 站点

ImportError:没有名为 django_filters 的模块