【问题标题】:Django field that can be either IntegerField or DecimalField可以是 IntegerField 或 DecimalField 的 Django 字段
【发布时间】:2021-04-23 18:58:42
【问题描述】:

在我的一个 Django 模型中,我有一个字段可以是 IntegerField 或 DecimalField,具体取决于用户。

当记录的值是一个整数时,表单应该只显示/编辑它而不是尾随数字。当记录的值有小数时,所有小数都应该在表格上显示/编辑。

我尝试将此字段定义为 DecimalField 并使用表单,但挑战是我使用 django-crispy-forms 呈现表单,因此我无法在模板中使用 floatformat 过滤器。

因此,5 作为整数,例如,在我的表单中显示为 5.00000000。

有没有办法解决这个问题?

【问题讨论】:

    标签: django django-models django-crispy-forms


    【解决方案1】:

    如果你想指定删除的 0 的数量,请尝试使用它:

    {{ your_number|floatformat:"-8" }}
    

    或者您也可以使用normalize 删除所有尾随的 0:

    {{ your_number.normalize }}
    

    【讨论】:

    • 不幸的是,当我使用 django-crispy-forms 时,我的字段是用 {{ field | as_crispy_field }}。有没有办法直接在表单或模型级别实现这一点?
    • 试试{{ field.normalize | as_crispy_field}}
    • 不幸的是,当我尝试这样做时,我得到了 |as_crispy_field got passed an invalid or inexistent field。我已经尝试过不同的变体,但都失败了。
    【解决方案2】:

    尝试使用round() 函数。 Link

    如果在不指定设置的小数位数的情况下使用,它只会删除任何尾随零。

    【讨论】:

      【解决方案3】:

      在处理表单数据时尽量使用 int() 函数。

      【讨论】:

      • 但是这会在没有处理的情况下改变表单值的实际显示吗?
      • 我认为问题在于显示的数字不在处理中。
      • 当您将数据传递到您的模板中时,您会将数字设为整数,但您的原始数据不会改变。你想让我告诉你它是如何工作的吗?
      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2015-08-31
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多