gpt4 book ai didi

python - 对表单提交的地址进行地理编码?

转载 作者:太空狗 更新时间:2023-10-29 20:50:45 26 4
gpt4 key购买 nike

试图让我全神贯注于 django 表单和 django 做事的方式。我想创建一个基本的 Web 表单,允许用户输入地址并将该地址进行地理编码并保存到数据库中。

我创建了一个 Location 模型:

class Location(models.Model):
address = models.CharField(max_length=200)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100, null=True)
postal_code = models.CharField(max_length=100, null=True)
country = models.CharField(max_length=100)
latitude = models.DecimalField(max_digits=18, decimal_places=10, null=True)
longitude = models.DecimalField(max_digits=18, decimal_places=10, null=True)

并定义了一个表单:

class LocationForm(forms.ModelForm):
class Meta:
model = models.Location
exclude = ('latitude','longitude')

在我看来,我正在使用 form.save() 来保存表单。这有效并将地址保存到数据库中。

我创建了一个模块来对地址进行地理编码。我不确定 django 的处理方式是什么,但我想在我保存表单之前,我需要对地址进行地理编码并设置纬度和经度。保存前如何设置经纬度?

最佳答案

您可以覆盖模型的保存方法。我在保存之前对数据进行地理编码。这是使用 googleapi,但可以相应地进行修改。

import urllib

def save(self):
location = "%s, %s, %s, %s" % (self.address, self.city, self.state, self.zip)

if not self.latitude or not self.longitude:
latlng = self.geocode(location)
latlng = latlng.split(',')
self.latitude = latlng[0]
self.longitude = latlng[1]

super(Marker, self).save()

def geocode(self, location):
output = "csv"
location = urllib.quote_plus(location)
request = "http://maps.google.com/maps/geo?q=%s&output=%s&key=%s" % (location, output, settings.GOOGLE_API_KEY)
data = urllib.urlopen(request).read()
dlist = data.split(',')
if dlist[0] == '200':
return "%s,%s" % (dlist[2], dlist[3])
else:
return ','

关于python - 对表单提交的地址进行地理编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com