【问题标题】:convert a string to integer in django templates在 Django 模板中将字符串转换为整数
【发布时间】:2018-04-30 09:34:05
【问题描述】:

尝试在 django 模板中乘以以下内容时出现错误(乘是自定义标签)-

{{ contact.cost|add:"0" |multiply:contact.rate }}

在models.py 中cost 是varchar 类型,rate 是decimal 类型。我尝试输入 add:"0" 以首先将字符串转换为整数然后相乘,但它仍然给出错误。

can't multiply sequence by non-int of type 'decimal.Decimal'

怎么了?对 django 还是很陌生,请帮忙。

编辑-

def multiplystr(x, y):
    val = Decimal(x)
    return Decimal(val * y)

错误-

[<class 'decimal.ConversionSyntax'>]
InvalidOperation

【问题讨论】:

标签: django django-models django-templates


【解决方案1】:

Django 没有内置任何东西可以将字符串转换为整数。

最好的办法是在视图中修复此问题(修复以使 contact.cost 是一个整数)或在您的自定义 multiply 函数中,以便它可以处理字符串。

类似下面的东西应该可以工作

def multiply(value, arg):
   value_as_int = int(value)
   return int(value_as_int * arg)

【讨论】:

  • 感谢 Henrik 的回复。为什么contact.cost|add:"0" |multiply:contact.rate 不起作用? add:"0" 根据定义表示它将转换为整数?
  • @user2715898 是您的multiply 函数引发了错误。很可能因为add 无法将0 添加到contact.cost。如果没有您的 multiply 函数源代码,则很难调试问题。
  • 嗨 Henrik,尝试了这个客户标签 - 我在 Decimal() 中有费率,所以我刚刚输入了 Decimal 而不是 int() - 查看已编辑的问题,但仍然给出错误
  • @user2715898 你能粘贴一些数据吗?好像还有什么问题。
  • 是的,它是数据,多个地方存储了 n/a、N/A、N/a。有什么好的方法来处理这个或通常的 if 语句?
【解决方案2】:

试试这个:

def multiplystr(x, y):
    valX = Decimal(x)
    valY = Decimal(y)
    return Decimal(valX * valY)

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2015-03-02
    • 1970-01-01
    • 2011-06-17
    • 2013-07-09
    • 2020-11-20
    • 2015-05-24
    相关资源
    最近更新 更多