django - Django Model 的值为 NoneType 为什么?
问题描述
我正在制作一个简单的应用程序,计算应用程序。用户选择选项并根据该选项应用程序计算需要的东西。
问题是在将数字保存在数据库中之前,我无法对其进行编辑。
我怎样才能做到这一点?谢谢你。
我尝试在models.py 中进行计算,但是当我从views.py 调用'def calculate()' 时,我需要它响应错误(NoneType)。
模型.py
class Video(models.Model):
sirina = models.IntegerField(null=True)
visina = models.IntegerField(null=True)
roletne = models.IntegerField(null=True)
okapnice = models.IntegerField(null=True)
materijal = models.IntegerField(null=True)
komore = models.IntegerField(null=True)
krila = models.IntegerField(null=True)
ks = models.IntegerField(default=True)
kv = models.IntegerField(editable=False, null=True)
ros = models.IntegerField(editable=False,blank=True, null=True)
rov = models.IntegerField(editable=False,blank=True, null=True)
proba = models.CharField(max_length=15,default='2')
briner = models.CharField(max_length=15,default='2'
def calculate(self):
return self.sirina + self.visina
total = property(calculate)
def save(self,*args,**kwargs):
self.ks = self.calculate()
super(Video,self).save(*args, **kwargs)
视图.py
def showvideo(request):
form = VideoForm(request.POST)
if form.is_valid():
b = 5000
sirina = request.POST.get('sirina')
visina = request.POST.get('visina')
roletne = request.POST.get('roletne')
#smejanje = sirina + 5000
s = sirina
#k = sirina
#b = k + 20
print(s)
print(sirina)
if sirina == '100' and roletne =='100':
print(True)
a = Video() ##
a.save() ## From here it respond with error NoneType
##
else:
print(False)
**EDIT**
I have this error:
"unsupported operand type(s) for +: 'NoneType' and 'NoneType'/
Traceback :
File "C:\Users\Nikola\Desktop\Desk\django\build\scripts-3.6\final1\calculator\views.py" in showvideo
26. a.save()
File "C:\Users\Nikola\Desktop\Desk\django\build\scripts-3.6\final1\calculator\models.py" in save
33. self.ks = self.total()
File "C:\Users\Nikola\Desktop\Desk\django\build\scripts-3.6\final1\calculator\models.py" in calculate
28. return self.sirina + self.visina
Exception Type: TypeError at /start/
Exception Value: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
####
Why is self.sirina and self.visina NoneType?
解决方案
您将sirina
and定义visina
为可以是的值None
:
sirina = models.IntegerField(null=True)
visina = models.IntegerField(null=True)
因此,无论何时访问这些属性,都必须小心处理它们。因为当你在Video
没有这些值的情况下初始化 a 时a = Video()
,它们将会是None
。
self.visina + self.sirina
将引发NoneType
错误,因为您不能+
在None
值上使用。
推荐阅读
- javascript - 使用 Regex JS 删除字符串中的重复单词
- android - 使用 Mockito 测试最小的实时数据视图模型
- java - Java将差异数组转换为变量
- python - Virtutalenv 命令“python setup.py egg_info”失败,错误代码为 1
- javascript - 尽管 API 已激活,但在尝试使用嵌入地图 API 时出现 ApiNotActivatedMapError
- java - Spring Boot 仅在 IDE 中工作
- javascript - 从特殊字符前后的字符串中获取值 - Jquery
- r - 将 XLS 转换为 CSV - R(试用 Rio 包)
- java - LocalDateTime 和 SQL Server JDBC 4.2 驱动程序
- postgresql - 为什么不同的查询值会产生不同的索引算法?