我目前正在一个模型类上使用@cached_property
,我想在保存时删除它,以便下次调用时可以重新填充它。我该怎么做?
例如:
class Amodel():
#...model_fields....
@cached_property
def db_connection(self):
#get some thing in the db and cache here
instance = Amodel.objects.get(id=1)
variable = instance.db_connection
Amodel.objects.select_for_update().filter(id=1).update(#some variable)
#invalidate instance.db_connection
#new_variable = instance.db_connection
谢谢
我创建了一个Django模型mixin,当调用
model.refresh_from_db()
时,它会使模型上的所有@cached_property
属性失效。也可以使用model.invalidate_cached_properties()
使缓存的属性无效https://gitlab.com/snippets/1747035
受Thomas Baden的答案启发
只需将其删除为文档says。这将导致下次访问时重新计算
对于Python3,它与
del
的用法相同。下面是try/except块的示例由于正在进行的开发,大量编辑。。。现在支持给定缓存的属性的多个标记
我遇到了一个类似的问题,其中我有一组相关的
cached_property
对象,它们都需要同时失效。我是这样解决的:扩展
cached_property
以接受标记值并包含装饰器类方法:在我的其他对象中,使用新的
cached_property.tag
装饰器类方法来定义标记的cached_property
方法:在使用新decorator的对象上,编写一个方法,通过遍历实例化对象类的
__dict__
来使用命名标记使所有cached_property
值无效。这可以防止意外调用所有cached_property
方法:现在,为了使其无效,我只调用
myobject.invalidate("foo_group")
相关问题 更多 >
编程相关推荐