Django-通过Google API转换纬度和经度的地址并保存对象

时间:2019-02-18 19:38:28

标签: django api google-maps django-models

我有一个地址模型,其中将地址保存在不同的字段中:

  • 地址_1
  • 地址_2
  • 邮政编码
  • 城市
  • 国家
  • 纬度
  • 经度

首先,我要求用户使用地址填写表单(不包含经度和纬度,默认情况下,它们设置为“ 0”)。然后,在保存对象之前,我尝试使用Google API将该地址转换为纬度和经度。

这是我的代码。我不知道这是否是正确的方法,但是现在它不起作用,并且出现错误

  

“浮动”对象没有属性“保存”

任何想法如何解决此问题? 在此先多谢。(我是编程新手,还是Django新手)

from django.db import models
from django.contrib.auth.models import User
from users.models import Profile
from django_countries.fields import CountryField
import requests


class Address(models.Model):
    profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
    address_1 = models.CharField(max_length=255, blank=True)
    address_2 = models.CharField(max_length=255, blank=True)
    zip_code = models.IntegerField(blank=True, null=True)
    city = models.CharField(max_length=255, blank=True)
    country = CountryField(blank=True)
    latitude = models.DecimalField(
        max_digits=9, decimal_places=6, blank=True, default='0')
    longitude = models.DecimalField(
        max_digits=9, decimal_places=6, blank=True, default='0')

    def __str__(self):
        return f'Adresse de {self.profile.user.username}'

    class Meta:
        verbose_name_plural = "addresses"

    def save(self, **kwargs):
        super().save(**kwargs)

        address = " ".join(
            [self.address_1, self.address_2, str(self.zip_code), self.city])
        api_key = "PROJECT_API_KEY"
        api_response = requests.get(
            'https://maps.googleapis.com/maps/api/geocode/json?address={0}&key={1}'.format(address, api_key))
        api_response_dict = api_response.json()

        if api_response_dict['status'] == 'OK':
            self.latitude = api_response_dict['results'][0]['geometry']['location']['lat']
            self.longitude = api_response_dict['results'][0]['geometry']['location']['lng']
            self.save()

1 个答案:

答案 0 :(得分:0)

正如@vctrd所指出的,我应该在函数的末尾放置super()。save(** kwargs)。现在可以了。