python - 在没有多次数据库请求的情况下在 Django 中多次调用外键对象

标签 python django django-models django-database

假设我有一个类 Child 通过 FK 链接到另一个类 Parent。现在假设我有一段代码在模板中执行类似的操作

<td>{{ child.parent.name }}</td>
<td>{{ child.parent.age}}</td>
<td>{{ child.parent.address }}</td>

我的第一个问题是,Django会去数据库中读取Parent实体3遍吗?我的第二个问题是:如果是,最好不要多次阅读它的最佳做法是什么?我的意思是我知道我可以在此 block 之前声明一个对象并将其设置为等于 child.parent 但是否有其他方法可以做到这一点?

最佳答案

不会,Django只会命中一次DB,下次调用会使用缓存属性,不需要访问DB,可以查看相关part文档。

但是您可以使用 select_related 来改进它方法,在这种情况下,即使第一次调用也不会命中 DB,因为 child.parent 将被预缓存。

关于python - 在没有多次数据库请求的情况下在 Django 中多次调用外键对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50152598/

相关文章:

python - 子文件夹中的 Django 迁移

python - 对象列表内列表的列表理解

python - 我想在应用程序关闭时保存 PyQt5 设置

python - 不使用 openssl 创建证书

python - 始终将用户包含在 django 模板上下文中

python - 在 Django 表单中保存默认值

python - 自动填充 Django ModelForms

python - Mask RCNN 使用 CPU 而不是 GPU

django - 无法设置 ImageField url 属性

python - Django - 刷新响应?