2012-05-18 9 views
15

Próbuję zapisać wynik operacji w moim admin.py i mam ten błąd:kwantyzacji wynik ma zbyt wiele cyfr obecnym kontekście

quantize result has too many digits for current context

.... 
def save_model(self, request, obj, form, change): 

    usuario_libra = obj.consignee.membresia.libra 
    valores   = Valores.objects.get(pk=1) 
    vtasa   = valores.tasa 
    vaduana   = valores.aduana 
    vgestion  = valores.gestion 
    vfee   = valores.fee 
    vcombustible = valores.combustible 

    trans_aereo  = obj.peso * usuario_libra * vtasa 
    aduana   = (obj.peso * vaduana)*vtasa 
    fee_airpot  = (obj.peso * vfee)*vtasa 
    combustible  = (obj.peso * vcombustible)*vtasa 
    itbis   = (trans_aereo+vgestion)*Decimal(0.16) 
    total   = trans_aereo + vgestion + aduana + fee_airpot + combustible + itbis 

    if not obj.id: 
     obj.total = total 
     ... 

Co to oznacza ?, wszystkie moje pola są modelowe dziesiętny Każda pomoc proszę

Dziękuję

+0

Czy [this] (http://stackoverflow.com/questions/2051575/django-combine-models-decimalfield-with-forms-error-quantize-result-has-too) pomaga? – okm

+0

@okm próbowałem i nie pomagam :( – Asinox

Odpowiedz

20

udało mi się rozwiązać ten problem poprzez zwiększenie opcję polu "max_digits.

class Myclass(models.Model): 
    my_field = models.DecimalField(max_digits=11, decimal_places=2, blank=True, null=True) 

Upewnij się, że jest wystarczająco duży, aby zmieścić najdłuższy numer, który chcesz zapisać.

Jeśli to nie zadziała może również trzeba ustawić precyzja większa przez:

from decimal import getcontext 
    ... 
    getcontext().prec = 11 

Zobacz dokumentację dziesiętną Pythona do pełnych parametrów kontekstu.

+2

Uwaga, to nie jest idealne, ponieważ zmienia wszędzie kontekst, co może złamać inny kod, który używa więcej niż 11 cyfr. – Cerin

Powiązane problemy