Django ORM - l'attribution d'une valeur brute de DecimalField
-
16-09-2019 - |
Question
EDIT !!! -. La coulée de la valeur à une chaîne semble fonctionner correctement lorsque je crée un nouveau objet, mais lorsque je tente de modifier un objet existant, il ne permet pas
J'ai un champ décimal dans l'un de mes modèles de décimal (3,2)
Quand je fais une recherche tous ces objets et d'essayer de définir ce champ:
fieldName = 0.85
ou
fieldName = .85
Il lancera un ajustement sifflants, « ne peut pas convertir flotteur DecimalField, essayez de le convertir à une première chaîne » ...
Alors je fais:
fieldName = str(0.85)
même erreur.
J'ai même essayé:
fieldName = "0.85"
erreur même. Suis-je courir dans une sorte de bug-cadre ici, ou quoi? Notez que quand je vais réellement dans Django admin et modifier manuellement les objets, il fonctionne très bien.
Je suis en cours d'exécution Django 1.1 Python 2.6
La solution
from decimal import Decimal
object.fieldName = Decimal("0.85")
ou
f = 0.85
object.fieldName = Decimal(str(f))
Autres conseils
Le DecimalField est » ... représentée par un python décimal de l'instance « . Vous pouvez essayer:
>>> obj.fieldName = Decimal("0.85")
Le comportement peut également varier en fonction de la base de données back-end que vous utilisez. Avec SQLite, je suis en mesure d'attribuer des valeurs de chaîne à DecimalFields dans les nouveaux et les objets existants sans erreur.