通过 self 访问相关对象是否会在 Django 中访问数据库?



在 Django 中,如果我在模型中有一个外键或 ManyToMany 字段,那么每次我尝试通过 self 访问它们时,数据库都会命中吗?

在此示例中,数据库命中了多少次?

# loop done 10 times
for x in looping_array:
print(self.foreign_key_object)
print(self.many_to_many_field.first())

编辑:添加了many_to_many_field行

它只会命中一次 DB。第二次和以后的调用将使用缓存的数据。从文档中:

首次缓存对一对多关系的转发访问 访问相关对象。对外键的后续访问 缓存在同一对象实例上。例:

>>> e = Entry.objects.get(id=2)
>>> print(e.blog)  # Hits the database to retrieve the associated Blog.
>>> print(e.blog)  # Doesn't hit the database; uses cached version.

至于manytomanysinseself.many_to_many_field.first()是一个查询集,它不会被缓存,并且会在每次迭代时命中 db。

相关内容

  • 没有找到相关文章

最新更新