我有一个地址模型,其中将地址保存在不同的字段中:
首先,我要求用户使用地址填写表单(不包含经度和纬度,默认情况下,它们设置为“ 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()
答案 0 :(得分:0)
正如@vctrd所指出的,我应该在函数的末尾放置super()。save(** kwargs)。现在可以了。