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
方法中删除
@属性。