想象一下以下模型:

class Parent(Model):
    ...

class Child(Model)
    father = ForeignKey(Parent)
    ...

有些父母有子元素,有些没有(他们不是真正意义上的父母,这只是一个虚构的名字).

我想提出以下问题:我想列出all the Parents个,如果他们有子元素,bring me the children too个.这相当于左外部联接到子表,即:

select * from app_parent left join app_child on child_father_id=parent_id

这样,当我在模板中调用Parent.child_set时,我就不会多次访问数据库.有办法吗?

推荐答案

从Django 1.4 prefetch_related开始,你可以随心所欲.

Parent.objects.prefetch_related('child_set')

相关(!)Django doctor :https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related人.

Django相关问答推荐

如何在Django中更改模型字段名称?

RDBMS多对多关系Django

Django 中模型将数据存储在哪里?

如何删除django请求中的重复项

CsrfViewMiddleware 和 enforce_csrf 有什么区别?

Django:创建一个动态侧边栏模板并在其他模板中使用它

Django:使用相同的外键在不同的应用程序中 Select 多个列

Django ModelForm提交按钮不起作用

Django 模板:翻译带有 HTML 的文本块的最佳实践

使用 Vagrant 进行端口转发时连接重置

将 **kwargs 传递给 Django 表单

如何从 json 模式创建表单?

为用户添加自定义权限

Django:创建索引:非唯一,多列

Django JavaScript 文件

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

Django - 了解 X-Sendfile

Django 发送邮箱

Django 1.7 - 如何 suppress (1_6.W001)某些元素单元测试可能无法按预期执行.?

Django模板转换为字符串