Django Sie ein benutzerdefiniertes Modell erstellen-Feld
Ich versuche, erstellen Sie ein benutzerdefiniertes Feld in Django, die eine dezimale Währung Wert (Beispiel: £1.56) und speichern es in der Datenbank als Integer (Beispiel: 156) zum speichern der Währung Werte.
Dies ist, was ich habe, so weit (ich habe Feste Werte zu testen)
class CurrencyField(models.DecimalField):
__metaclass__ = models.SubfieldBase
def get_internal_type(self):
return 'PositiveIntegerField'
def to_python(self, value):
print "CurrentField to_python"
return Decimal(value)/100
def get_db_prep_value(self, value, connection, prepared=False):
print "CurrentField get_db_prep_value"
if value is None:
return value
print type(value)
return int(value*100)
Ich bin nach dem Python-1.7 Dokumentation für die Erstellung eigener Felder-Modell.
In dem obigen code, die get_db_prep_value
- Methode wird nie aufgerufen, wenn ich das Modell speichern mit Hilfe dieses Feldes. Die to_python
Methode funktioniert gut (wenn ich Sie manuell geben Sie den Wert in der DB wird es wieder die richtigen dezimal), aber es wird nie " den richtigen Wert.
Habe ich auch versucht, mit Hilfe get_prep_value
und das Ergebnis ist das gleiche.
Wie kann ich es machen das sparen der richtige Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Von Integer basierten MoneyField
Ich habe mit dieser Django-snippet für einige Zeit, aber später erkannte, es war die Einführung von floating-point-Artefakte bei der Umwandlung in eine Ganzzahl vor dem speichern der Datenbank.
Ist auch, wie der Django 1.9 SubfieldBase ist veraltet und wir sollten das Feld verwenden.from_db_value statt. Also ich habe bearbeitet den code, um zu beheben diese Probleme.