首页 > 解决方案 > 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? 


标签: djangodjango-models

解决方案


您将sirinaand定义visina为可以是的值None

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

因此,无论何时访问这些属性,都必须小心处理它们。因为当你在Video没有这些值的情况下初始化 a 时a = Video(),它们将会是None

self.visina + self.sirina

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


推荐阅读