Django - преобразование адреса по широте и долготе через Google API и сохранение объекта - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть модель адреса, в которой я сохраняю адрес в разных полях:

  • 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()

1 Ответ

0 голосов
/ 19 февраля 2019

Как указывал @vctrd, я должен был поместить super (). Save (** kwargs) в конце своей функции.Теперь это работает.

...