我想在model属性上使用@cached_property以避免过多的数据库访问。
class AttrGroup(models.Model):
...
@cached_property
def options(self):
options = AttributeOption.objects.filter(group_id=self.id)
return options
...
这很好用。
我想使用以下函数来更新options的值。但我应该怎么做呢?对于属性装饰器,它有一个setter。
def _set_options(self, value):
for option in value:
AttributeOption.objects.create(group_id=self.id, option=option.get('option'))
答案 0 :(得分:5)
答案 1 :(得分:3)
Django的cached_property
对象用第一次调用时修饰函数调用的结果替换它,因此你不能使缓存无效。
编辑:愚蠢的我 - 当然你可以,你只需要按照Albar的回答del self.__dict__['options']
- 因为结果存储在实例上,删除它会使类级cached_property
属性可用试。
如果您想要更“可重复使用”的内容,可以在此处查看:Storing calculated values in an object