不支持的操作数类型*: 'NoneType'和'Decimal
我有一个用Django做的应用程序,专门用来管理增值税(VAT)。比如,它可以计算来自欧盟的所有销售的增值税。
vat = purchases[0].vat.vat
eu_sales = Sale.objects.filter(country_type='2')
eu_amount = (eu_sales.aggregate(price = Sum('amount'))['price']) * vat/100
不过,今天我把我的文件复制到了另一台机器上。然后我收到了一个错误信息:
unsupported operand type(s) for *: 'NoneType' and 'Decimal'
我意识到出现这个错误是因为还没有存储eu_amount
的值。换句话说,eu_amount
没有值,所以它不能和一个小数值相乘。以下是我在模板中的内容:
{{eu_amount}}
有没有办法过滤这个模板标签?我想说,如果这个值是None(或者说是空值),那么就把它当作0。
3 个回答
0
你是说这个吗?
{% if item %}
something
{% else %}
something different
{% endif %}
这个内容来自于 https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs
我几乎可以肯定,最近我在某个地方见过这个 .vat.vat ;)
0
把这一行代码
vat = purchases[0].vat.vat
改成
vat = purchases[0].vat.vat or 0
意思是,如果
purchases[0].vat.vat
这个值是空的或者不存在,就把vat
的值设为0。这样可以避免出现错误。
6
你可以试着使用一个默认值,像这样。
eu_amount = (eu_sales.aggregate(price = Sum('amount'))['price']) or 0 * vat/100
不过,最好的方法可能是先检查一下你的求和结果是否为空,如果是的话,就显示一个警告信息,因为这种情况不应该发生。