преобразовать строку в целое число в шаблонах django

Я получаю сообщение об ошибке при попытке умножить приведенное ниже в шаблонах django (умножение - это настраиваемый тег) -

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

Стоимость имеет тип varchar, а скорость имеет десятичный тип в models.py. Я попытался ввести 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

person user2715898    schedule 29.04.2018    source источник
comment
Возможный дубликат TypeError: не может умножать последовательность на не -int типа 'str'   -  person Henrik Andersson    schedule 30.04.2018


Ответы (2)


В Django нет ничего встроенного для преобразования строк в целые числа.

Лучше всего либо исправить это в представлении (исправив так, чтобы contact.cost было целым числом), либо в вашей пользовательской функции multiply, чтобы она могла обрабатывать строки.

Что-то вроде ниже должно работать

def multiply(value, arg):
   value_as_int = int(value)
   return int(value_as_int * arg)
person Henrik Andersson    schedule 29.04.2018
comment
Спасибо Хенрик за ответ. Почему же contact.cost|add:0 |multiply:contact.rate не работает? add:0 по определению говорит, что он будет конвертировать в целые числа? - person user2715898; 30.04.2018
comment
@user2715898 user2715898 это ваша функция multiply выдает ошибку. Скорее всего, поскольку add не может добавить 0 к contact.cost. Без вашего исходного кода функции multiply трудно отладить проблему. - person Henrik Andersson; 30.04.2018
comment
Привет, Хенрик, попробовал эти пользовательские теги - у меня есть ставки в Decimal(), поэтому вместо int() я только что вставил Decimal - см. отредактированный вопрос, но все равно выдает ошибку - person user2715898; 30.04.2018
comment
@user2715898 user2715898 Можете ли вы вставить некоторые данные? Кажется, что-то еще не так. - person Henrik Andersson; 30.04.2018
comment
да, это данные, в нескольких местах хранятся н/д, н/д, н/д. Есть ли хороший способ справиться с этим или обычными операторами if? - person user2715898; 30.04.2018

Попробуй это:

def multiplystr(x, y):
    valX = Decimal(x)
    valY = Decimal(y)
    return Decimal(valX * valY)
person Ken    schedule 30.04.2018