有一个模型,在其地理位置字段中,latitude
和longitude
以字符串的形式存储在这种形式中,即“.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关联的模型时,我都会看到正在计算属性,即使在某些情况下,我也会从外部服务中捕获连接超时。
我无法理解这种行为的原因。
答案 0 :(得分:0)
问题在于save ()
方法,我没有调用address
属性,而是调用address()
方法,因此没有缓存。