我应该使用 gmap 地理编码从 view.py 或 model.py 中的地址计算 lat/lng 吗?
Should I put the gmap geocode to calculate the lat/lng from an address in the view.py or in the model.py?
我的目标是:
- 获取用户使用通用 python 表单提交的地址
- 获取地址数据并计算地址lat/lng
- 将地址数据和lat/lng数据存储在数据库的同一行
有人告诉我地理编码应该在 models.py 内计算。
django 如何对表单提交的数据进行计算,然后将整个数据集输入数据库?
我正在使用 django 1.11、Python 3.6 和 gmaps api。
我可以计算 views.py 中的 lat/lng 但被告知要将所有业务登录放在 models.py 中,我不知道如何移动 lat/lng代码放入models.py.
期待任何建议。
我想放入 models.py 的代码部分,以便在我的 models.Model class 中生成经纬度输入。我尝试使用以下方法,但无法生成经纬度。
class OwnerLocationEntry(models.Model):
uid = models.CharField(max_length=75)
location_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
address_number = models.CharField(max_length=10)
street_name = models.CharField(max_length=35)
unit_number = models.CharField(max_length=10, null=True, blank=True)
city = models.CharField(max_length=35)
state = models.CharField(max_length=25, choices=US_STATES_TER)
zip_code = models.CharField(max_length=13, null=True, blank=True)
#create lat lng geocode
def get_geocode(self):
g = geocoders.GoogleV3(api_key=api_key)
inputaddress = "%s, %s, %s, %s, %s" % (self.address_number, self.street_name, self.city, self.state, self.zip_code)
location = g.geocode(inputaddress, timeout=10)
lat= location.latitude
lng = location.longitude
return lat, lng
lat = models.CharField(max_length=13)
lng = models.CharField(max_length=13)
我建议重写模型的 save
方法,以便在 creating/editing.
时获得 lat/lng
class OwnerLocationEntry(models.Model):
...
def save(self, *args, **kwargs):
self.lat, self.lng = self.get_geocode()
super(OwnerLocationEntry, self).save(*args, **kwargs)
def get_geocode(self):
...
return lat, lng
那么您可能有一个 ModelForm
with a FormView
or a generic view such as CreateView
or UpdateView
来处理创建表单、验证表单和保存表单,这反过来又会调用上面的保存方法。
我的目标是:
- 获取用户使用通用 python 表单提交的地址
- 获取地址数据并计算地址lat/lng
- 将地址数据和lat/lng数据存储在数据库的同一行
有人告诉我地理编码应该在 models.py 内计算。
django 如何对表单提交的数据进行计算,然后将整个数据集输入数据库?
我正在使用 django 1.11、Python 3.6 和 gmaps api。
我可以计算 views.py 中的 lat/lng 但被告知要将所有业务登录放在 models.py 中,我不知道如何移动 lat/lng代码放入models.py.
期待任何建议。
我想放入 models.py 的代码部分,以便在我的 models.Model class 中生成经纬度输入。我尝试使用以下方法,但无法生成经纬度。
class OwnerLocationEntry(models.Model):
uid = models.CharField(max_length=75)
location_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
address_number = models.CharField(max_length=10)
street_name = models.CharField(max_length=35)
unit_number = models.CharField(max_length=10, null=True, blank=True)
city = models.CharField(max_length=35)
state = models.CharField(max_length=25, choices=US_STATES_TER)
zip_code = models.CharField(max_length=13, null=True, blank=True)
#create lat lng geocode
def get_geocode(self):
g = geocoders.GoogleV3(api_key=api_key)
inputaddress = "%s, %s, %s, %s, %s" % (self.address_number, self.street_name, self.city, self.state, self.zip_code)
location = g.geocode(inputaddress, timeout=10)
lat= location.latitude
lng = location.longitude
return lat, lng
lat = models.CharField(max_length=13)
lng = models.CharField(max_length=13)
我建议重写模型的 save
方法,以便在 creating/editing.
class OwnerLocationEntry(models.Model):
...
def save(self, *args, **kwargs):
self.lat, self.lng = self.get_geocode()
super(OwnerLocationEntry, self).save(*args, **kwargs)
def get_geocode(self):
...
return lat, lng
那么您可能有一个 ModelForm
with a FormView
or a generic view such as CreateView
or UpdateView
来处理创建表单、验证表单和保存表单,这反过来又会调用上面的保存方法。