如何解决TypeError: NoneType 对象在 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
但是当我查看我的数据库时,我看到一个 geography-point 类型的值已添加到 FirmAddress
列中。当我删除 FirmAddress 功能并更新模型时,我没有收到任何错误并且一切正常。
我无法理解的部分是,如果 FirmAddress 数据可以正确添加到数据库中,为什么我会收到 'NoneType' object
错误?我该如何解决这种情况?非常感谢。
解决方法
为什么我会收到“NoneType”对象错误?
因为您将 save
定义为 @property
。因此,如果您使用 self.save
,它会调用 save 方法,而 self.save
会将对象返回作为值,但那是 None
,因此错误。
因此您应该删除 @property
装饰器:
class Firm(models.Model):
# …
# no property
def save(self,*args,**kwargs):
self.FirmAddress = Point(self.lng,self.lat)
return super().save(*args,**kwargs)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。