SORU
6 Ocak 2010, ÇARŞAMBA


Nasıl paranın bir değeri saklamak gerekir?Django:

Bir paradigma sorunu burada karşılaştım. Bir Ondalık olarak para saklamak gerekir mi bilmiyorum () bir dize olarak depolamak ve bir ondalık dönüştürmek kendim olsam ya. Benim mantık şudur:

PayPal 2 ondalık basamak gerektirireğer 49 $ olan bir ürün var , PayPal 49.00 Tel rastlamak görmek istiyor. Django bu DecimalField (ondalık) bir şey elde etmek değil. Sadece en fazla ondalık basamak miktarda depolar. Orada 49 ve 2 ondalık alan ayarlarsanız, hala 49 olarak saklayın. Bildiğim Django temelde tã¼rã¼ne bu de-serialize geri veritabanına bir Ondalık (beri Veritabanları yok ondalık alanları) ben değilim, bu yüzden tamamen endişe ile hız sorunları kadar ben ile tasarım sorunları bu sorun. Kullanildigini için en iyi olanı yapmak istiyorum.

Ya da, daha iyisi, herkes django bir DecimalField yapılandırmak için nasıl biliyor mu() her zaman TWO_PLACES tarzı. biçimlendirme ile format için

CEVAP
6 Ocak 2010, ÇARŞAMBA


.quantize() yöntemi kullanmak isteyebilirsiniz. Bu yerler belirli sayıda yer sayısını belirtir verdiğiniz bağımsız değişken: bir ondalık sayı yuvarlak

>>> from decimal import Decimal
>>> Decimal("12.234").quantize(Decimal("0.00"))
Decimal("12.23")

Ayrıca ne istediğinizi belirtmek için bir değişken (farklı muhasebe sistemleri farklı yuvarlama isteyebilirsiniz). Python docs Daha fazla bilgi.

Aşağıda otomatik olarak doğru değer üreten özel bir alan. Bu sadece veritabanından olduğunu unutmayın, ve sen o zaman alışkanlık sen kendine yardım et (db kaydetmek ve tekrar almak kadar!).

from django.db import models
from decimal import Decimal
class CurrencyField(models.DecimalField):
    __metaclass__ = models.SubfieldBase

    def to_python(self, value):
        try:
           return super(CurrencyField, self).to_python(value).quantize(Decimal("0.01"))
        except AttributeError:
           return None

[Düzenle]

ekledi __metaclass__, Django: Why does this custom model field not behave as expected? bkz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011