如何更新django cached_property

时间:2017-03-27 06:22:05

标签: python django

我想在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'))

2 个答案:

答案 0 :(得分:5)

您可以通过删除cached_property来使其失效:

del self.options

请参阅here

答案 1 :(得分:3)

Django的cached_property对象用第一次调用时修饰函数调用的结果替换它,因此你不能使缓存无效。

编辑:愚蠢的我 - 当然你可以,你只需要按照Albar的回答del self.__dict__['options'] - 因为结果存储在实例上,删除它会使类级cached_property属性可用试。

如果您想要更“可重复使用”的内容,可以在此处查看:Storing calculated values in an object