TypeError: NoneType object is not callable on GeoDjango
TypeError: NoneType object is not callable on GeoDjango
虽然我已经阅读了很多关于PointField
和'NoneType' object error
的类似文章,但我无法弄清楚这个字段应该如何根据我从用户那里收到的经纬度变量自动保存.
这是我的模型:
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 import 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
但是当我查看我的数据库时,我看到 FirmAddress
列中添加了一个 geography-point 类型的值。当我删除 FirmAddress 功能并更新模型时,我没有收到任何错误并且一切正常。
我无法理解的部分是,如果可以将 FirmAddress 数据正确添加到数据库中,为什么我会收到 'NoneType' object
错误?我该如何解决这种情况?非常感谢。
Why am I getting the 'NoneType' object error?
因为您将 save
定义为 @property
。结果,如果你使用 self.save
,它会调用 save 方法,而 self.save
会将对象 返回的 作为值,但那是 None
,因此错误。
因此您应该删除 @property
装饰器:
class Firm(models.Model):
# …
# <i>no</i> property
def save(self, *args, **kwargs):
self.FirmAddress = Point(self.lng, self.lat)
return super().save(*args, **kwargs)
虽然我已经阅读了很多关于PointField
和'NoneType' object error
的类似文章,但我无法弄清楚这个字段应该如何根据我从用户那里收到的经纬度变量自动保存.
这是我的模型:
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 import 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
但是当我查看我的数据库时,我看到 FirmAddress
列中添加了一个 geography-point 类型的值。当我删除 FirmAddress 功能并更新模型时,我没有收到任何错误并且一切正常。
我无法理解的部分是,如果可以将 FirmAddress 数据正确添加到数据库中,为什么我会收到 'NoneType' object
错误?我该如何解决这种情况?非常感谢。
Why am I getting the 'NoneType' object error?
因为您将 save
定义为 @property
。结果,如果你使用 self.save
,它会调用 save 方法,而 self.save
会将对象 返回的 作为值,但那是 None
,因此错误。
因此您应该删除 @property
装饰器:
class Firm(models.Model):
# …
# <i>no</i> property
def save(self, *args, **kwargs):
self.FirmAddress = Point(self.lng, self.lat)
return super().save(*args, **kwargs)