Je suis en train d'essayer quelques calculs simples dans une méthode de nettoyage après la validation (en crachant essentiellement une conversion en euro du prix du produit uk récupéré à la volée). Je continue d'obtenir un TypeError.Erreurs dans les Calcs décimaux dans la méthode def clean?
erreur complète se lit comme suit:
Impossible de convertir { 'produit':, 'facture': 'order_discount': décimal ("0,00"), 'order_price': {...}, 'order_adjust': Aucun, 'order_value': Aucun, 'DELETE': False, 'id': 92, 'quantity': 8} en Decimal
donc je suppose que django passe à travers toute la forme clean_data à la méthode Decimal. Je ne sais pas où je vais mal - le code, je travaille avec est:
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
Si la facture est de type 2 (une facture euro), le système devrait saisir le dernier taux de change et l'appliquer à le prix de la livre britannique correspondante s'est ressaisi pour obtenir le résultat de l'euro.
La conversion décimale doit-elle être un problème dans la méthode def clean?
Merci
Je ne comprends pas comment le code que vous avez publié arrive à la décimale: il soulève inconditionnellement une exception juste avant que/elif. Vérifiez et corrigez les indentations? –
Aussi, une fois que vous avez édité: pourquoi obtenez-vous "order_price" à partir de clean_data deux fois, une fois avec un get à assigner à une variable que vous ignorez, et une fois avec une indexation []? Et pourquoi renvoyez-vous un Decimal dans certains cas et un dict dans d'autres? C'est du code assez déroutant! –