为什么cached_property总是更新数据?

时间:2017-06-01 19:38:13

标签: django django-signals

有一个模型,在其地理位置字段中,latitudelongitude以字符串的形式存储在这种形式中,即“.234234234,53.23423423434'。” p>

此字段由django-geoposition提供。多亏了他,输入地址非常方便。

我还需要存储真实地址。我不知道是否正确执行此操作,但我决定使用geocoder,并将结果存储在cached_property

class Address(models.Model):
    geoposition = GeopositionField(null=True)
    city = models.ForeignKey('cities_light.City', null=True)
    country = models.ForeignKey('cities_light.Country', null=True)
    entrance = models.CharField(null=True, max_length=4, blank=True)
    floor = models.CharField(null=True, max_length=4, blank=True)
    flat = models.CharField(null=True, max_length=4, blank=True)

    @cached_property
    def address(self):
        g = geocoder.yandex([
            str(self.geoposition).split(',')[0], 
            str(self.geoposition).split(',')[1]
        ],
        method='reverse', lang='ru-RU')
        return g.address


    def save(self, *args, **kwargs):
        if not self.address:
            self.address()

        super(Address, self).save(*args, **kwargs)


    def __str__(self):
        if self.address:
            return '%s' % str(self.address)
        return '%s' % str(self.pk)

但问题是,每次尝试编辑与Address关联的模型时,我都会看到正在计算属性,即使在某些情况下,我也会从外部服务中捕获连接超时。

我无法理解这种行为的原因。

1 个答案:

答案 0 :(得分:0)

问题在于save ()方法,我没有调用address属性,而是调用address()方法,因此没有缓存。