Django +;的操作数类型不受支持:';非类型';和';非类型';

Django +;的操作数类型不受支持:';非类型';和';非类型';,django,django-models,django-errors,django-aggregation,Django,Django Models,Django Errors,Django Aggregation,我如何处理这个错误,它让我发疯: unsupported operand type(s) for +: 'NoneType' and 'NoneType' 也 我知道它告诉我什么(我想),所以这是我写的代码,试图与之抗争 视图: 我想我所做的是将它们的值设置为0,然后再将其相加,如果碰巧得到的值为none。有没有另一种方法来处理这个问题,当其中一个没有出现时,它会被设置为零,这样它就可以被添加。此外,当两者都为“无”时,可以将它们设置为0,以便添加它们。部分问题可能是if/elif逻辑。请记住

我如何处理这个错误,它让我发疯:

unsupported operand type(s) for +: 'NoneType' and 'NoneType'

我知道它告诉我什么(我想),所以这是我写的代码,试图与之抗争

视图:


我想我所做的是将它们的值设置为0,然后再将其相加,如果碰巧得到的值为none。有没有另一种方法来处理这个问题,当其中一个没有出现时,它会被设置为零,这样它就可以被添加。此外,当两者都为“无”时,可以将它们设置为0,以便添加它们。

部分问题可能是if/elif逻辑。请记住,只有当第一个if语句注册为false时,elif才会运行。那么,想象一下这个场景:

check = 0
ind = None
team = None
在该场景中,首先发生的是carttotal被设置为0。然后,由于第一个if为true(检查为0),剩余的elif不会运行,并且ind+团队尝试添加它们,即使它们没有从“无”更改

有更优雅的方法可以做到这一点,但如果您只是将elifs更改为ifs,它应该可以正常工作。不过,这里有一些冗余,并通过使用第三级运算符将逻辑缩短到几行

ind_query = signedup.objects.filter(sessionid = session)
ind = ind_query.aggregate(Sum ('price'))['price__sum'] if ind_query else 0

team_query = team_signup.objects.filter(sessionid = session)
team = team_query.aggregate(Sum ('price'))['price__sum'] if team_query else 0

carttotal = ind + team

首先添加
print int
print team
以查看哪些值是
None
。还有,这是你的真实观点吗?stacktrace+准确的代码会很有帮助是的,这是我的实际视图,后面的所有内容都是返回。我不确定堆栈跟踪是什么。他们中的任何人都可能是无的,因为chain从两个查询中获取值,他们不会总是都返回一些东西StackTrace是您在错误屏幕上看到的(其中提到问题的行号等…)先生,因为您,我觉得更聪明。我希望我曾经想过要这样做,而不是我最终要做的事情(如果不存在的话创建一个虚拟实例(我还是新的))。你的方法在db上可能更有效,所以我会使用它,谢谢。我不知道elif只有在if为false时才会发生。是的,elif是Python对“else,if”的缩写形式——所以在第二个if被计算之前,“else”部分必须为true(意思是原来的if为false)。
check = 0
ind = None
team = None
ind_query = signedup.objects.filter(sessionid = session)
ind = ind_query.aggregate(Sum ('price'))['price__sum'] if ind_query else 0

team_query = team_signup.objects.filter(sessionid = session)
team = team_query.aggregate(Sum ('price'))['price__sum'] if team_query else 0

carttotal = ind + team