在django模型中修改save()会保持循环
我正在尝试创建一个基于GoogleMapAPI的模型 如果对象不存在,我想保存名称、地址、经度、纬度和google place ID。下面是我的代码:但是,当我运行它时,它进入循环并停止检查google地图。你能告诉我怎么了吗在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=
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()
?