在 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.
至于manytomany
sinseself.many_to_many_field.first()
是一个查询集,它不会被缓存,并且会在每次迭代时命中 db。