我应该使用gmap地理编码从view.py或model.py中的地址计算lat / lng吗?

时间:2017-06-13 16:00:59

标签: django google-maps python-3.6 django-1.11

我的目标是:

  1. 使用通用python表单提交用户提交的地址
  2. 获取地址数据并计算地址的纬度/经度
  3. 将地址数据和lat / lng数据存储在数据库的同一行中
  4. 我被告知应该在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)
    

1 个答案:

答案 0 :(得分: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 FormViewgeneric view such as CreateView or UpdateView来处理创建表单,验证表单并保存表单,然后再调用save方法在上面。