django如何在请求/响应周期中处理缓存的_属性失效?

django如何在请求/响应周期中处理缓存的_属性失效?,django,django-models,Django,Django Models,假设我有一个带有: Django说: 缓存的结果将保持实例的时间,因此如果传递实例并随后调用函数,则将返回缓存的结果 这意味着cached\u属性如何在请求/响应周期中工作?例如,如果我只在模板中使用object.count\u friends,它是否会在每次调用视图时刷新(假设浏览器缓存已清除!) 我理解对了吗?例如,每次我给数据库打电话时,我都假设它刷新了 在什么样的实际情况下它不会被刷新?@cached\u属性会按实例进行缓存。请求-响应周期与此无关(除非您将模型作为不应执行的全局变量或在

假设我有一个带有:

Django说:

缓存的结果将保持实例的时间,因此如果传递实例并随后调用函数,则将返回缓存的结果

这意味着
cached\u属性
如何在请求/响应周期中工作?例如,如果我只在模板中使用
object.count\u friends
,它是否会在每次调用视图时刷新(假设浏览器缓存已清除!)

我理解对了吗?例如,每次我给数据库打电话时,我都假设它刷新了


在什么样的实际情况下它不会被刷新?

@cached\u属性
会按实例进行缓存。请求-响应周期与此无关(除非您将模型作为不应执行的全局变量或在Django缓存中存放,…)


谢谢,所以在您的示例中,每次调用相同的视图时,都应该刷新L3中的db?例如,如果我在另一个视图中使用
m.count\u friends
,它仍然会刷新,因为它是在视图中调用的?它实际上不依赖于视图,可能是任何旧函数。只要将相同的
m
传递给其他用户,它就会在第一次检索后重用缓存的值。queryset
get
方法总是返回一个新实例。
class MyModel(models.Model):
    name = fields.Charfield()

    @cached_property
    def count_friends(self):
        return self.friends_set.count()
def my_view(request):
    m = MyModel.objects.get(id=42)
    x = m.count_friends  # causes a DB access
    x = m.count_friends  # does not cause a DB access
    m = MyModel.objects.get(id=42)
    x = m.count_friends  # causes a DB access
    x = m.count_friends  # does not cause a DB access