在Django中,如果我在模型中有一个ForeignKey或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行
答案 0 :(得分:1)
它将仅命中一次DB。第二次及以后的调用将使用缓存的数据。来自docs:
第一次缓存对多对多关系的访问 相关对象被访问。后续对外键的访问 在同一对象实例上被缓存。示例:
>>> 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
sinse self.many_to_many_field.first()
是一个查询集,它将不被缓存,并且每次迭代都会命中db。