미국 달러 금액을 나타내는 데 사용하는 가장 좋은 장고 모델 필드는 무엇입니까?


103

Django 모델의 필드에 US $ 달러 금액을 저장해야합니다. 사용하기에 가장 좋은 모델 필드 유형은 무엇입니까? 사용자가이 값을 입력하고 (오류 검사를 통해 센트 단위로 정확한 숫자 만 원함) 다른 위치에있는 사용자에게 출력 할 수 있도록 형식을 지정하고 다른 숫자를 계산하는 데 사용할 수 있어야합니다.

답변:


166

진수 필드는 통화 값에 대한 최적의 선택이 될 것입니다.

다음과 같이 보일 것입니다.

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

98
국가 부채를 대표하지 않는 한,이 경우 max_digits는> 20이어야합니다
Bron Davies

4
다른 통화를 지원하기 위해 필요한 경우 decimal_places = 2가 반드시 정확하지는 않습니다. 일부 통화는 세 소수 자릿수가 있고, 비트 코인은 백일해 8가
거짓말 라이언

2
이 예는 거의 모든 통화에 맞다고 생각합니다. 통화를 비트 코인으로 표현하려면 정수 필드를 사용하여 금액을 satoshis로 저장 한 다음 원하는 표현 (BTC, mBTC 등)으로 최종 사용자에게 표시하는 것이 훨씬 낫다고 생각합니다.
jion

당신은 당신이 21 max_digits을 필요로하는 경우에의 베네수엘라 국가 통화로 베네수엘라의 국가 채무, 표현하고자하지 않는 한
루이스 Sieira

@LieRyan 사실입니다. 우리는 미래의 db 수정을 방지하기 위해 현대적인 유형의 "통화"를 기록해야합니다. 따옴표 사용에 대한 위법 행위가 없습니다.
enchance


35

다른 답변은 100 % 맞지만 출력, 서식 등을 수동으로 관리해야하므로 실용적이지 않습니다.

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

python-money를 통한 강력한 백엔드가 있으며 기본적으로 표준 십진수 필드를 대체합니다.


(오류 검사를 사용하면 센트 단위로 정확한 숫자 만 원함) 다른 위치에있는 사용자에게 출력 할 수 있도록 형식을 지정하고 다른 숫자를 계산하는 데 사용합니다. 이러한 경우 사용 DecimalField이 더 실용적입니다. 그리고 나는 그것이 대부분의 사람들에게 적용되었다고 믿습니다. django-money강조 표시된대로 사용하여 통화 처리를 포함 합니다. 그래서 이것은 전자 상거래 사이트, 지불 게이트웨이, 디지털 화폐, 은행 등 거래와 관련된 프로젝트에 더 많은 것입니다 ....
Yeo

USD (통화)로 작업하고 있기 때문에 django-money (python-money)와 같은 통화 처리 라이브러리를 사용하는 것이 더 합리적이라고 주장합니다. 향후 기능 조정. 원래 질문은 형식화 및 계산이 필요하다고 말하며 (인용 한대로) 간단한 십진수 필드 대신 통화 라이브러리를 사용하는 것이 좋습니다.
Michael Thompson

1
두 개의 돈 필드를 추가하거나 몇 가지 계산을 수행하려면 어떻게합니까?
saran3h jul

1
@ saran3h 돈 인스턴스로 작업하고 다른 숫자 (10 진수) 인스턴스와 같은 계산을 수행 할 수 있습니다. 당신은 등 정수에 의해 곱셈, 추가 / 뺄 수
마이클 톰슨

8

소수점을 정의하고 값 앞에 $ 기호를 반환합니다.

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

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

6
속성에 무한 재귀 루프를 생성했다는 것을 알고 있습니까?
El Ninja Trepador

흥미 롭군. 어떻게 된 것인지 물어봐도 될까요?
kingraphaii

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

다음과 같은 PostgreSQL 용 필드를 만들어야합니다.

 "field" numeric(8, 2) NOT NULL

PostGreSQL이 미국 달러 금액을 저장하는 가장 좋은 방법입니다.

PostgreSQL 필드 유형 "배정 밀도"가 필요한 경우 django 모델에서 수행해야합니다.

field = models.FloatField()

3
사람들은 돈에 대한 반올림 오류에 불만을 느끼는 경향이 있으므로 돈을 부동 소수점 숫자로 표시하지 않도록주의하십시오. 자세한 내용은 stackoverflow.com/questions/3730019/… 를 참조하십시오.
Adam Parkin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.