2010-01-12 5 views
5

Desidero combinare un campo decimale del modello con un campo di scelta delle forme.django combina modelli.Decimale con forme -> errore: il risultato di quantizzazione ha troppe cifre per il contesto corrente

Il campo nel modello:

sum = models.DecimalField(max_digits=2, decimal_places=2) 

Il campo in forma:

sum = forms.ChoiceField(choices=WORK_HOUR_CHOICES, label='Sum Working Hours', required=True) 

Le scelte:

WORK_HOUR_CHOICES = (
    (0, '0'), 
    (0.5, '0.5'), 
    (1, '1'), 
    (1.5, '1.5'), 
    (2, '2'), 
    (2.5, '2.5') 
) 

Ma sempre quando voglio per memorizzare un valore con un decimale ottengo questo errore:

quantize result has too many digits for current context 

Quando si salva uno 0 o 1, funziona correttamente.

Cosa c'è che non va?

risposta

6

E 'solo una supposizione, ma scommetto è necessario mettere decimali in là:

WORK_HOUR_CHOICES = (
    (Decimal("0"), '0'), 
    (Decimal("0.5"), '0.5'), 
    (Decimal("1"), '1'), 
    (Decimal("1.5"), '1.5'), 
    (Decimal("2"), '2'), 
    (Decimal("2.5"), '2.5') 
) 

Non è possibile inizializzare un decimale con una costante galleggiante, è necessario utilizzare una stringa.

>>> from decimal import Decimal 
>>> Decimal(1.5) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\software\Python25\lib\decimal.py", line 578, in __new__ 
    "First convert the float to a string") 
TypeError: Cannot convert float to Decimal. First convert the float to a string 
>>> Decimal("1.5") 
Decimal("1.5") 
+1

Grazie, questo era il problema. L'ho provato e funziona. Inoltre mi hai indirizzato nella giusta direzione e sono passato a Float nel campo Modello, dal momento che non ho bisogno di decimali. Con float funziona con l'impostazione iniziale. –

+0

"* Non è possibile inizializzare un decimale con una costante mobile, è necessario utilizzare una stringa. *" <- SÌ. Questo problema mi dava fastidio! – Gabriel

Problemi correlati