Django(地理)地理编码-模型保存上的地理编码不工作
我的模型上有一个保存覆盖:Django(地理)地理编码-模型保存上的地理编码不工作,django,google-maps,google-maps-api-3,google-geocoder,geodjango,Django,Google Maps,Google Maps Api 3,Google Geocoder,Geodjango,我的模型上有一个保存覆盖: def save(self, **kwargs): if not self.location: address = u'%s %s %s %s' % (self.address_first, self.address_second, self.address_third, self.postcode) geocoder = Nominatim() try: _, latlon =
def save(self, **kwargs):
if not self.location:
address = u'%s %s %s %s' % (self.address_first, self.address_second, self.address_third, self.postcode)
geocoder = Nominatim()
try:
_, latlon = geocoder.geocode(address)
except (GeopyError, ValueError):
pass
else:
latlon = geocoder.geocode(address)
point = 'POINT({0} {1})'.format(latlon[1][1], latlon[1][0])
self.location = geos.fromstr(point)
super(Venue, self).save()
我越来越
TypeError: 'NoneType' object is not iterable
特别是在地址变量上。如果我硬编码一个地址就可以了
我想这与self.address。。。在模型保存后才可用?最好的方法是什么?保存两次
谢谢
如果其他人有问题,请更新。Google希望api请求的地址格式为Line1+Line2+Line3+Zipcode,而不是Line1、Line2、line、Zipcode等。因此,在尝试和地理编码之前,只需格式化字符串即可。它实际上不是Django/Python特定的
def save(self, **kwargs):
if not self.location:
address = u'{0}, {1}, {2}'.format(self.address_second, self.address_third, self.postcode)
address = address.replace(" ", "+").replace(',', '')
geocoder = GoogleV3()
try:
_, latlon = geocoder.geocode(address)
except (GeopyError, ValueError):
pass
else:
latlon = geocoder.geocode(address)
point = 'POINT({0} {1})'.format(latlon[1][1], latlon[1][0])
self.location = geos.fromstr(point)
super(Venue, self).save()
FFS,每次我在这里问一个问题,我都会在大约30秒后计算出来……最后,结果发现谷歌不喜欢带有空格的地址,所以我不得不把它们去掉,然后用“+”将地址的每个部分加在一起。问题已更新,以备将来参考