Python TypeError:无法在GeoDjango上调用非类型对象
虽然我读过许多关于Python TypeError:无法在GeoDjango上调用非类型对象,python,django,django-models,geodjango,Python,Django,Django Models,Geodjango,虽然我读过许多关于点域和'NoneType'对象错误的类似文章,但我不知道该如何根据从用户处收到的纬度和经度变量自动保存该字段 这是我的模型: from django.db import models from django.contrib.gis.db import models from django.contrib.gis.geos import Point class Firm(models.Model): FirmName =
点域
和'NoneType'对象错误
的类似文章,但我不知道该如何根据从用户处收到的纬度和经度变量自动保存该字段
这是我的模型:
from django.db import models
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
class Firm(models.Model):
FirmName = models.CharField(max_length=50)
address = models.CharField(max_length=1000, null=True, blank=True)
FirmAddress = models.PointField(null=True, blank = True, geography=True, default=Point(0.0, 0.0))
lat = models.FloatField(null=True, blank=True)
lng = models.FloatField(null=True, blank=True)
Logo = models.ImageField(null=True, blank=True)
@property
def save(self, *args, **kwargs):
self.FirmAddress = Point(self.lng, self.lat)
super(Firm, self).save(*args, **kwargs)
在Django shell上,我键入
from firm.models首先导入firm
命令,然后
Firm.objects.create(FirmName=“QWERTY”,address=“temp”,lat=24,lng=54,Logo='Logo.jpg')
命令。下面是我在最后得到的错误:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\Deniz\Desktop\PROJECT\fenv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Deniz\Desktop\PROJECT\fenv\lib\site-packages\django\db\models\query.py", line 453, in create
obj.save(force_insert=True, using=self.db)
TypeError: 'NoneType' object is not callable
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Deniz\Desktop\PROJECT\fenv\lib\site packages\django\db\models\manager.py”,第85行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“C:\Users\Deniz\Desktop\PROJECT\fenv\lib\site packages\django\db\models\query.py”,第453行,在create中
对象保存(force_insert=True,using=self.db)
TypeError:“非类型”对象不可调用
但是当我查看我的数据库时,我看到一个geography point类型的值被添加到FirmAddress
列中。当我删除FirmAddress功能并更新模型时,我没有收到任何错误,一切正常
我很难理解的是,如果FirmAddress数据可以正确地添加到数据库中,为什么我会得到'NoneType'对象
错误?我怎样才能解决这个问题?非常感谢
为什么会出现“非类型”对象错误
因为您将保存
定义为@属性
。因此,如果使用self.save
,它将调用save方法,self.save
将对象返回的值作为值,但该值为None
,因此出现错误
因此,您应该删除
@属性
装饰器:
class Firm(models.Model):
# …
# no property
def save(self, *args, **kwargs):
self.FirmAddress = Point(self.lng, self.lat)
return super().save(*args, **kwargs)
类别公司(models.Model):
# …
#无财产
def保存(自身、*args、**kwargs):
self.FirmAddress=点(self.lng、self.lat)
return super().save(*args,**kwargs)
从save
方法中删除@属性。