2009-07-16 10 views
59

मुझे Django मॉडल के क्षेत्र में एक यूएस $ डॉलर की राशि स्टोर करने की आवश्यकता है। उपयोग करने के लिए सबसे अच्छा मॉडल फ़ील्ड प्रकार क्या है? मुझे उपयोगकर्ता को यह मान दर्ज करने में सक्षम होना चाहिए (त्रुटि जांच के साथ, केवल सेंट के लिए सटीक संख्या चाहिए), इसे विभिन्न स्थानों पर उपयोगकर्ताओं के आउटपुट के लिए प्रारूपित करें, और अन्य नंबरों की गणना करने के लिए इसका उपयोग करें।अमेरिकी डॉलर की राशि का प्रतिनिधित्व करने के लिए उपयोग करने के लिए सबसे अच्छा डीजेंगो मॉडल फ़ील्ड क्या है?

उत्तर

95

decimal field मुद्रा मूल्य के लिए सही विकल्प है।

यह कुछ ऐसी दिखाई देगी:

credit = models.DecimalField(max_digits=6, decimal_places=2) 
+29

जब तक आप राष्ट्रीय ऋण का प्रतिनिधित्व नहीं करना चाहते हैं, तो उस स्थिति में अधिकतम_डिजिट होना चाहिए> 20 –

+0

दशमलव_प्लेस = 2 आवश्यक नहीं है यदि आपको अन्य मुद्राओं का समर्थन करने के लिए इसकी आवश्यकता हो। कुछ मुद्राओं में तीन दशमलव स्थान होते हैं, और बिटकॉइन में एक हूपिंग 8. –

+0

मुझे लगता है कि यह उदाहरण लगभग सभी मुद्राओं के लिए सही है। बिटकॉइन के रूप में मुद्राओं का प्रतिनिधित्व करने के लिए, मुझे लगता है कि सतोशिस में राशि को बचाने के लिए एक पूर्णांक क्षेत्र का उपयोग करना बेहतर होता है, और उसके बाद इसे प्रस्तुत करने वाले अंतिम उपयोगकर्ता को दिखाएं (बीटीसी, एमबीटीसी, आदि) – jion

28
field = models.DecimalField(max_digits=8, decimal_places=2) 

ध्यान दें कि max_digits होना चाहिए> = decimal_places। इस उदाहरण स्थापित करने के लिए ऊपर एक मूल्य की अनुमति होगी: 999,999.99

डॉक्स: https://docs.djangoproject.com/en/1.10/ref/models/fields/#decimalfield

7

एक दशमलव परिभाषित करें और मूल्य के सामने एक $ साइन लौट आते हैं।

price = models.DecimalField(max_digits=8, decimal_places=2) 

    @property 
    def price(self): 
     return "$%s" % self.price 
+0

आपको एहसास है कि आप बस अपनी संपत्ति में एक अनंत रिकर्सन लूप बनाया, है ना? –

1
field = models.DecimalField(max_digits=8, decimal_places=2) 

तरह PostgreSQL के लिए एक क्षेत्र बनाना चाहिए:

"field" numeric(8, 2) NOT NULL 

PostgreSQL संग्रहीत अमेरिकी डॉलर राशि के लिए सबसे अच्छा तरीका है कौन सा।

field = models.FloatField() 
17

अन्य उत्तर 100% सही हैं, लेकिन बहुत ही व्यावहारिक आप अभी भी होगा के रूप में नहीं कर रहे हैं:

आप एक PostgreSQL फ़ील्ड प्रकार "डबल परिशुद्धता" की जरूरत है, तो आप Django मॉडल में क्या जरूरत है मैन्युअल रूप से उत्पादन के प्रबंधन के लिए, स्वरूपण आदि

मैं django-money उपयोग करने का सुझाव होगा:

from djmoney.models.fields import MoneyField 
from django.db import models 


def SomeModel(models.Model): 
    some_currency = MoneyField(
     decimal_places=2, 
     default=0, 
     default_currency='USD', 
     max_digits=11, 
    ) 
खाके से

वर्क्स स्वचालित रूप से:

{{ somemodel.some_currency }} 

आउटपुट:

$123.00 

यह अजगर-पैसे के माध्यम से एक शक्तिशाली बैकएंड है और यह अनिवार्य रूप से मानक दशमलव क्षेत्रों के लिए एक ड्रॉप में प्रतिस्थापन है।

+0

* (त्रुटि जांच के साथ, केवल सेंट के लिए सटीक संख्या चाहिए), इसे विभिन्न स्थानों पर उपयोगकर्ताओं के आउटपुट के लिए प्रारूपित करें, और अन्य नंबरों की गणना करने के लिए इसका उपयोग करें। * ऐसे मामलों के लिए, 'डेसिमलफ़िल्ल्ड' का उपयोग अधिक व्यावहारिक है। और मेरा मानना ​​है कि यह ज्यादातर लोगों के लिए लागू होता है। जैसा कि उन्होंने हाइलाइट किया था, 'django-money' का उपयोग करके, ** मुद्रा ** हैंडलिंग शामिल करें।तो यह ईकॉमर्स साइट्स, पेमेंट गेटवे, डिजिटल मुद्रा, बैंकिंग इत्यादि जैसे लेनदेन से जुड़े परियोजना के लिए अधिक है .... – Yeo

+0

मैं तर्क दूंगा कि चूंकि वे यूएसडी के साथ काम कर रहे हैं - एक मुद्रा - यह अधिक समझ में आता है एक मुद्रा-हैंडलिंग लाइब्रेरी का उपयोग करें जैसे डीजेंगो-मनी (पायथन-मनी) क्योंकि यह सब कुछ काम करता है जैसा कि आप उम्मीद करते हैं और भावी फीचर समायोजन प्रदान करता है। मूल प्रश्न कहता है कि उन्हें फ़ॉर्मेटिंग और गणना की आवश्यकता है (जैसा कि आपने उद्धृत किया है) और इसके लिए आप एक साधारण दशमलव फ़ील्ड के बजाय मुद्रा लाइब्रेरी का उपयोग करना बेहतर कर रहे हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे