在django模型中修改save()会保持循环

在django模型中修改save()会保持循环,django,django-models,Django,Django Models,我正在尝试创建一个基于GoogleMapAPI的模型 如果对象不存在,我想保存名称、地址、经度、纬度和google place ID。下面是我的代码:但是,当我运行它时,它进入循环并停止检查google地图。你能告诉我怎么了吗 class Place(models.Model): name = models.CharField(max_length=200, null=True, blank=True) address = models.CharField(max_length=

我正在尝试创建一个基于GoogleMapAPI的模型

如果对象不存在,我想保存名称、地址、经度、纬度和google place ID。下面是我的代码:但是,当我运行它时,它进入循环并停止检查google地图。你能告诉我怎么了吗

class Place(models.Model):
    name = models.CharField(max_length=200, null=True, blank=True)
    address = models.CharField(max_length=200, null=True, blank=True)
    logitude = models.CharField(max_length=20, null=True, blank=True)
    latitude = models.CharField(max_length=20, null=True, blank=True)
    id_google = models.CharField(max_length=50, null=True, blank=True)

    date_created = models.DateTimeField(_('date created'), default=timezone.now)
    date_modified = models.DateTimeField(_('date_modified'), auto_now=True)

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        try:
            place = Place.objects.get(name=self.name)
        except Place.DoesNotExist:
            gmaps = googlemaps.Client(key=settings.GOOGLE_MAPS_API_KEY)
            geocode_result = gmaps.geocode(self.address)
            place = Place(name=self.name, 
                        address=geocode_result[0]['formatted_address'],
                        logitude=geocode_result[0]['geometry']['location']['lng'],
                        latitude=geocode_result[0]['geometry']['location']['lat'],
                        id_google=geocode_result[0]['place_id'], 
                        )
            place.save()
        return place
save(…)
方法中调用
place.save()
,从而触发另一次保存。您可能只需在位编辑该项,然后使用
super().save()
调用保存它:

class Place(models.Model):

    # ...

    def save(self, *args, **kwargs):
        try:
            place = Place.objects.get(name=self.name)
        except Place.DoesNotExist:
            gmaps = googlemaps.Client(key=settings.GOOGLE_MAPS_API_KEY)
            geocode_result = gmaps.geocode(self.address)[0]
            self.address = geocode_result['formatted_address']
            location = geocode_result['geometry']['location']
            self.logitude = location['lng']
            self.latitude = location['lat']
            self.id_google = geocode_result['place_id']
            super().save(*args, **kwargs)
上课地点(models.Model):
# ...
def保存(自身、*args、**kwargs):
尝试:
place=place.objects.get(name=self.name)
除Place.DoesNotExist外:
gmaps=googlemaps.Client(key=settings.GOOGLE\u MAPS\u API\u key)
geocode_result=gmaps.geocode(self.address)[0]
self.address=geocode\u结果['formatted\u address']
位置=地理编码结果['geometry']['location']
self.logitude=位置['lng']
self.latitude=位置['lat']
self.id\u google=geocode\u结果['place\u id']
super().save(*args,**kwargs)
save(…)
方法中调用
place.save()
,从而触发另一次保存。您可能只需在位编辑该项,然后使用
super().save()
调用保存它:

class Place(models.Model):

    # ...

    def save(self, *args, **kwargs):
        try:
            place = Place.objects.get(name=self.name)
        except Place.DoesNotExist:
            gmaps = googlemaps.Client(key=settings.GOOGLE_MAPS_API_KEY)
            geocode_result = gmaps.geocode(self.address)[0]
            self.address = geocode_result['formatted_address']
            location = geocode_result['geometry']['location']
            self.logitude = location['lng']
            self.latitude = location['lat']
            self.id_google = geocode_result['place_id']
            super().save(*args, **kwargs)
上课地点(models.Model):
# ...
def保存(自身、*args、**kwargs):
尝试:
place=place.objects.get(name=self.name)
除Place.DoesNotExist外:
gmaps=googlemaps.Client(key=settings.GOOGLE\u MAPS\u API\u key)
geocode_result=gmaps.geocode(self.address)[0]
self.address=geocode\u结果['formatted\u address']
位置=地理编码结果['geometry']['location']
self.logitude=位置['lng']
self.latitude=位置['lat']
self.id\u google=geocode\u结果['place\u id']

super().save(*args,**kwargs)
您已经覆盖了
Place.save()
但是现在在您的函数中,您调用了
Place.save()
?您已经覆盖了
Place.save()
但是现在在您的函数中,您调用了
Place.save()