【问题标题】:Decimal field in Django Admin FormDjango 管理表单中的小数字段
【发布时间】:2011-02-19 11:40:43
【问题描述】:

我有一个模型,其中包含一个字段:

TAX_CHOICES = (
    (10.5, '10.5%'),
    (17.5, '17.5%'),
    (30, '30%'),
    (33, '33%'),
)

taxBracket = models.DecimalField(max_digits=4, decimal_places=2, choices=TAX_CHOICES, default=10.5)

我有在我的应用程序中工作的现有 Django 表单,以允许用户成功输入他们的税级。但是,我需要通过 Django Admin 界面手动添加一些用户信息,但是当我选择 10.5 或 17.5 值时出现如下错误:

Value Decimal('10.5') is not a valid choice

通过阅读 Django 文档,我了解到 Admin 表单将 DecimalField 类型视为“文本”输入,但我不确定我应该查看模型定义还是自定义 Admin 表单。我目前没有在此项目中定义用于管理站点自定义的 admin.py。

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    您已将字段选项定义为浮点数。浮点数 10.5 不等于小数 Decimal("10.5")

    将选项定义为字符串或小数:

    TAX_CHOICES = (
        (Decimal("10.5"), '10.5%'),
        (Decimal("17.5"), '17.5%'),
        (Decimal("30"), '30%'),
        (Decimal("33"), '33%'),
    )
    

    【讨论】:

    • 解决了,谢谢。我不知道 Python 中的 Decimal 和 Float 之间的区别。 This Python Documentation 清楚地解释了差异。感谢您指出这一点。
    • 值得注意的是,Django 的选择对您如何实例化 Decimal 也很敏感。所以在我的情况下, Decimal('20.00') 有效,但 Decimal('20') 和 Decimal(20) 没有。
    猜你喜欢
    • 2016-08-13
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多