代码之家  ›  专栏  ›  技术社区  ›  MikeN

表示美元金额的最佳django模型字段是什么?

  •  73
  • MikeN  · 技术社区  · 15 年前

    我需要在django模型的字段中存储美元金额。要使用的最佳模型字段类型是什么?我需要能够让用户输入这个值(通过错误检查,只需要一个精确到美分的数字),格式化它以输出到不同地方的用户,并使用它来计算其他数字。

    5 回复  |  直到 7 年前
        1
  •  116
  •   Ali LiaVa    11 年前

    decimal field 是正确的选择 货币价值。

    它看起来像:

    credit = models.DecimalField(max_digits=6, decimal_places=2)
    
        2
  •  31
  •   Lee Hinde    8 年前
    field = models.DecimalField(max_digits=8, decimal_places=2)
    

    请注意,最大位数应为>=小数位数。此示例设置允许最大值为:999999.99

    Docs: https://docs.djangoproject.com/en/1.10/ref/models/fields/#decimalfield

        3
  •  26
  •   Michael Thompson    7 年前

    其他答案是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
  •  7
  •   Çagatay Melan    11 年前

    定义一个小数,并在值前面返回一个$符号。

        price = models.DecimalField(max_digits=8, decimal_places=2)
    
        @property
        def price(self):
            return "$%s" % self.price
    
        5
  •  1
  •   manuelpgs    11 年前
    field = models.DecimalField(max_digits=8, decimal_places=2)
    

    应该为PostgreSQL创建一个字段,比如:

     "field" numeric(8, 2) NOT NULL
    

    这是PostgreSQL存储美元金额的最佳方式。

    如果需要PostgreSQL字段类型“Double Precision”,则需要在Django模型中执行以下操作:

    field = models.FloatField()