在Django中多次调用外键对象而不需要多次数据库请求

Y2H*_*Y2H 5 python django django-models django-database

让\xe2\x80\x99s 说我有一个类Child通过FK 链接到另一个类Parent。现在让\xe2\x80\x99s 说我有一个代码块在模板中执行类似的操作

\n\n
<td>{{ child.parent.name }}</td>\n<td>{{ child.parent.age}}</td>\n<td>{{ child.parent.address }}</td>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

nev*_*ner 5

不会,Django只会访问数据库一次,下次调用将使用缓存属性并且不需要访问数据库,您可以查看文档的相关部分。

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