Ошибки в десятичных Calcs в методе def clean? - PullRequest
0 голосов
/ 07 июня 2009

Я пытаюсь выполнить несколько простых вычислений в методе def clean после проверки (в основном, выполняя конвертирование в евро цены восстановленного продукта в Великобритании на лету). Я продолжаю получать ошибку TypeError.

Полная ошибка:

Невозможно преобразовать {'product':, 'invoice':, 'order_discount': Decimal ("0.00"), 'order_price': {...}, 'order_adjust': None, 'order_value': None, '' DELETE: False, id: 92, количество: 8} до десятичного числа

поэтому я предполагаю, что django проходит через всю форму cleaned_data в метод Decimal. Не знаю, где я ошибаюсь - код, с которым я работаю:

def clean_order_price(self):
    cleaned_data = self.cleaned_data
    data = self.data
    order_price = cleaned_data.get("order_price")
    if not order_price:
        try:
            existing_price = ProductCostPrice.objects.get(supplier=data['supplier'], product_id=cleaned_data['product'], is_latest=True)
        except ProductCostPrice.DoesNotExist:
            existing_price = None
        if not existing_price:
            raise forms.ValidationError('No match found, please enter new price')
        else:
            if data['invoice_type'] == 1:
                return existing_price.cost_price_gross
            elif data['invoice_type'] == 2:  
                exchange = EuroExchangeRate.objects.latest('exchange_date')
                calc = exchange.exchange_rate * float(existing_price.cost_price_gross)
                calc = Decimal(str(calc))
                return calc

    return cleaned_data

Если накладная относится к типу 2 (накладная в евро), то система должна получить последний курс обмена и применить его к соответствующей цене в британских фунтах, полученной для получения результата в евро.

Должно ли выполнение десятичного преобразования быть проблемой в методе def clean?

Спасибо

1 Ответ

0 голосов
/ 07 июня 2009

Я собираюсь предположить, что вы допустили ошибку отступа при вставке, и строки из if data['invoice_type'] == 1: должны быть на самом деле с отступом на один уровень назад - иначе, как говорит Алекс, код никогда не попадет в десятичное преобразование.

Есть много других проблем с этим кодом, но самая большая в том, что последняя строка возвращает весь словарь cleaned_data, а не значение этого конкретного поля - я подозреваю, что это является причиной ошибки, которую вы видите.

Кроме этого, существует большая ошибка, при которой вы вычисляете calc, умножая cost_price_gross на exchange. Здесь exchange является экземпляром EuroExchangeRate, а не числом, поэтому этот расчет не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...