У меня есть модель адреса, в которой я сохраняю адрес в разных полях:
- address_1
- address_2
- zip_code
- city
- страна
- широта
- долгота
Сначала я прошу пользователя заполнить форму с адресом (без широты и долготы, по умолчанию ониустановлены на «0»).Затем я пытаюсь преобразовать этот адрес в широту и долготу с помощью Google API перед сохранением объекта.
Вот мой код.Я не знаю, если это правильный способ сделать это, но сейчас это не работает, и я получаю ошибку
У объекта 'float' нет атрибута 'save'
Есть идеи, как решить эту проблему?Заранее большое спасибо. (Я новичок в программировании и новичок в 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()