Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django型号:将地址格式化为long/lat-型号未保存_Python_Django - Fatal编程技术网

Python Django型号:将地址格式化为long/lat-型号未保存

Python Django型号:将地址格式化为long/lat-型号未保存,python,django,Python,Django,我有个问题。我正在尝试创建一个带有地址的模型,并将其格式化为GPS点。 问题是,当我试图从admin保存时,所有内容都已保存(long和lat除外) 在我的API的仪表板上,所有请求都在这里。我不明白这里怎么了 shop/models.py from opencage.geocoder import OpenCageGeocode class Supermarket(models.Model): name = models.CharField(null=True,blank=True,

我有个问题。我正在尝试创建一个带有地址的模型,并将其格式化为GPS点。 问题是,当我试图从admin保存时,所有内容都已保存(long和lat除外)

在我的API的仪表板上,所有请求都在这里。我不明白这里怎么了

shop/models.py

from opencage.geocoder import OpenCageGeocode

class Supermarket(models.Model):
    name = models.CharField(null=True,blank=True,max_length=300)
    street = models.CharField(null=True,blank=True,max_length=300)
    number_street = models.CharField(null=True,blank=True,max_length=20)
    town = models.CharField(null=True,blank=True,max_length=60)
    zipcode = models.CharField(null=True,blank=True,max_length=20)
    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')
    slug = models.SlugField(editable=False)
    
    def __str__(self):
        return self.name
    
    def save(self, *args,**kwargs):
        self.slug = slugify(self.name)
        
        address = " ".join([self.number_street, self.street, self.zipcode, self.town])
        key = 'xxxx'
        geocoder = OpenCageGeocode(key)
        result = geocoder.geocode(address, no_annotations='1')

        if result:
            self.longitude = result[0]['geometry']['lng']
            self.latitude  = result[0]['geometry']['lat']
            self.save()
            
        super().save(*args, **kwargs)
我试过了,一切都很好:所以我真的不明白这里出了什么问题

>>> from opencage.geocoder import OpenCageGeocode
>>> from pprint import pprint
>>> key = 'xxxxx'
>>> query = u'XXXXX'
>>> results = geocoder.geocode(query)
>>> print(u'%f;%f;%s;%s' % (results[0]['geometry']['lat'],
...                         results[0]['geometry']['lng'],
...                         results[0]['components']['country_code'],
...                         results[0]['annotations']['timezone']['name']))
XX.XXXXXX;X.XXXXXX;fr;Europe/Paris
更新-非常简单

def __str__(self):
        return self.name
    
    def save(self, *args,**kwargs):
        self.slug = slugify(self.name)
        supermarket = super().save()
        
        address = " ".join([self.number_street, self.street, self.zipcode, self.town])
        result = geocoder.geocode(address)

        if result and len(result):
            self.longitude = result[0]['geometry']['lng']
            self.latitude  = result[0]['geometry']['lat']
            
        super(Supermarket, self).save(*args, **kwargs)
请试试下面的

key = 'xxxx'
geocoder = OpenCageGeocode(key)

class Supermarket(models.Model):
    ...

    def save(self, commit=True):
        supermarket = super().save(commit=False)

        self.slug = slugify(self.name)
        address = " ".join([self.number_street, self.street, self.zipcode, self.town])
        result = geocoder.geocode(address, no_annotations='1')

        if result and commit:
            self.longitude = result[0]['geometry']['lng']
            self.latitude  = result[0]['geometry']['lat']
            supermarket.save()

您为longitute和latituede字段提供字符串默认值,而它们获得整数值。您的意思是我必须更改longitute=models.DecimalField of longitute=models.IntegerField(无默认值)。很抱歉,我开始想,在你的
模型.py
中,你对
save
方法的实现是错误的,你能纠正我的save方法吗?你进行了递归,所以如果你不想递归地实现
save
方法,你必须在默认参数中给出
commit=True
,无需*args、**kwargs?因为我遇到了一个致命的问题“很抱歉,出了点问题。”。已记录该问题以供调查。请稍后再试。“我必须删除此def\uu str\uuu(self):返回self.name。问题已经解决,但现在我得到了这个,save()得到了一个意外的关键字参数“commit”