2017-06-01 3 views
0

ジオロケーションフィールドにlatitudelongitudeのモデルがあり、文字列として'27 .234234234,53.23423423434 'の形式で格納されています。なぜcached_propertyは常にデータを更新しますか?

このフィールドはdjango-geopositionで提供されています。彼のおかげで、住所を入力するのが非常に便利です。

また、実際の住所を保存する必要があります。私はこれを正しく行うかどうかわかりませんが、私は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) 

geocoderを使用して、結果を格納することにしました。しかし、問題は、アドレスに関連付けられているモデルを編集するためのあらゆる試みであることである、Iプロパティが計算されていることを確認し、場合によっては外部サービスからの接続タイムアウトを取得します。

この現象の原因を理解できません。

答えて

0

save()メソッドでは、addressプロパティを呼び出していませんでしたが、address()というメソッドはキャッシングがありませんでした。

関連する問題