【问题标题】:Django views : unsupported operand type(s) for +: 'int' and 'NoneType'Django 视图:+ 不支持的操作数类型:“int”和“NoneType”
【发布时间】:2020-07-20 04:38:13
【问题描述】:

我遍历存储在我的数据库中的多个问题,每个问题都有 5 个答案(开放性、尽责性、外向性、宜人性、神经质),并试图计算每个答案重复的次数并存储分数

型号:

class Reponses(models.Model):
    ScoreOp = models.IntegerField(blank=True,null=True)
    ScoreCon = models.IntegerField(blank=True,null=True)
    ScoreExt = models.IntegerField(blank=True,null=True)
    ScoreAgr = models.IntegerField(blank=True,null=True)
    ScoreNeu = models.IntegerField(blank=True,null=True)
    Product = models.OneToOneField("Product", on_delete=models.CASCADE,null=True)

class Personalite(models.Model):
    Question = models.CharField(max_length=50,blank=True)
    openness = models.CharField(max_length=20,blank=True)
    conscientiousness = models.CharField(max_length=20,blank=True)
    extraversion = models.CharField(max_length=20,blank=True)
    agreeableness = models.CharField(max_length=20,blank=True)
    neuroticism = models.CharField(max_length=20,blank=True)
    models.ForeignKey("Reponses", on_delete=models.CASCADE,null=True)

观看次数:

def home_views(request):
questions= Personalite.objects.all()
product = Product.objects.get(id=5)
if request.method == 'POST':
    try:
        reponse = Reponses.objects.create()
        reponse = Reponses(Product= product)
        allRep = []
        allRep = request.POST.getlist('poll')
        for Rep in allRep:
            print(Rep)
            if Rep == 'openness':
                reponse.ScoreOp = reponse.ScoreOp + 1

            elif Rep == 'conscientiousness':
                reponse.ScoreCon += 1

            elif Rep == 'extraversion':
                reponse.ScoreExt += 1

            elif Rep == 'agreeableness':
                reponse.ScoreAgr += 1

            elif Rep == 'neuroticism':
                reponse.ScoreNeu += 1
            else :
                print('HAHAHAHHAHAAH')
            
        reponse.save()
    except NameError:
        print("An exception occurred",NameError)

context={
    'questions':questions
}
return render(request , "home.html",context)

【问题讨论】:

  • 你的问题是什么,在哪一行发生了什么错误?

标签: python django django-models django-views


【解决方案1】:

reponse = Reponses(Product= product) 这不会保存您调用save() 方法所需的响应对象,因此reponse.ScoreOp 为无。

试试这个。

首先正确创建响应对象。

 reponse = Reponses.objects.create(Product=product)

而且,除了将null=True 指定给整数字段之外,还提供默认值0

ScoreOp = models.IntegerField(default=0) # properly migrate after change in model

现在在视图中。

 if Rep == 'openness':
      reponse.ScoreOp += 1

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 2018-04-16
    • 2017-12-27
    • 2014-03-31
    • 2021-05-23
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多