0

我的目标是:

  1. 获取用户使用通用 python 表单提交的地址
  2. 获取地址数据并计算地址的纬度/经度
  3. 将地址数据和 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 类中生成 lat 和 lng 输入。我尝试使用以下内容,但无法生成 lat lng。

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)
4

1 回答 1

0

我建议覆盖save您的模型方法,以便在创建/编辑时获得 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带有 aFormView或一个通用视图,例如CreateVieworUpdateView,它将处理创建表单、验证它并保存它,这反过来又会调用上面的 save 方法。

于 2017-06-13T17:56:44.207 回答