Django Model的值为NoneType为什么?

时间:2019-04-03 10:30:12

标签: django django-models

我正在制作一个简单的应用程序,计算应用程序。 用户选择选项,然后根据该选项应用程序计算所需的东西。

问题是我无法在将数字保存到数据库之前对其进行编辑。

我该怎么做? 谢谢。

我尝试在models.py中进行计算,但是我需要  当我从views.py调用'def compute()'时,它会返回错误(NoneType)。

Models.py

MB

Views.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)


2 个答案:

答案 0 :(得分:0)

您将sirinavisina定义为可以是None的值:

sirina = models.IntegerField(null=True)
visina = models.IntegerField(null=True)

因此,每当访问这些属性时,都必须注意如何使用它们。因为当您通过执行Video初始化没有这些值的a = Video()时,它们将是None

self.visina + self.sirina

将引发NoneType错误,因为您不能在+值上使用None

答案 1 :(得分:0)

您应该尝试使用a.save()而不是form.save()。您将所有数据都保存在表格中。创建Video的新实例并再次保存回它是没有意义的。另外,您应该避免在这些字段中接受空值,或者在calculate方法中处理空条件。