Какое наилучшее поле модели django используется для представления суммы в долларах США?

Мне нужно сохранить сумму доллара США в долларах США в поле модели Django. Каков наилучший тип поля модели? Мне нужно, чтобы пользователь вводил это значение (с проверкой ошибок, нужно только точное число до цента), отформатировать его для вывода пользователям в разных местах и ​​использовать его для вычисления других чисел.

Ответ 1

Десятичное поле является правильным выбором для значения валюты.

Это будет выглядеть примерно так:

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

Ответ 2

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

Ответ 3

Другие ответы на 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 и заменяет стандартные десятичные поля.

Ответ 4

Определите десятичную дробь и верните знак $ перед значением.

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

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

Ответ 5

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

Создать поле PostgreSQL, например:

 "field" numeric(8, 2) NOT NULL

Каков наилучший способ хранения PostGreSQL в долларах США.

Если вам нужен тип поля PostgreSQL "двойная точность", то вам нужно сделать в модели django:

field = models.FloatField()