Ich versuche ein paar einfache Berechnungen in einer Def-Clean-Methode nach Validierung (im Grunde spuckt eine Euro-Konvertierung von abgerufenen uk Produktpreis im laufenden Betrieb). Ich bekomme immer einen TypeError.Fehler in Dezimalberechnungen innerhalb der Def-Clean-Methode?
Voll Fehler lautet:
Kann nicht { 'Produkt' konvertieren: 'Rechnung': 'order_discount': Dezimal ("0.00"), 'order_price': {...}, 'order_adjust': Keine, 'LÖSCHEN': Keine, 'LÖSCHEN': Falsch, 'ID': 92, 'Menge': 8} bis Dezimal
also denke ich, dass Django die gesamte gereinigte_Datenform zur Dezimalmethode durchläuft. Nicht sicher, wohin ich gehe falsch - der Code ich arbeite mit ist:
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
Wenn die Rechnung vom Typ 2 (a Euro Rechnung), dann sollte dem System den aktuellen Wechselkurs packen und dann Anwendung, wenn auf Der entsprechende UK-Pfund-Kurs wurde durchgezogen, um das Euro-Ergebnis zu erhalten.
Sollte eine Dezimalumwandlung ein Problem innerhalb der Def Clean-Methode sein?
Dank
Ich verstehe nicht, wie der Code, den Sie gepostet haben, jemals an das Dezimalsystem kommt: Es erzeugt bedingungslos eine Ausnahme direkt vor dem if/elif. Überprüfen und korrigieren Sie den Eindruck pls? –
Auch, wenn Sie edit: Warum erhalten Sie zweimal "Order_Price" aus cleaned_data, einmal mit einem Get zu einer Variablen zuweisen, die Sie dann ignorieren, und einmal mit einer Indexierung []? Und warum gibst du in einigen Fällen ein Dezimalsystem und in anderen ein Diktat zurück? Es ist ziemlich verwirrender Code! –