ModelForms 输入字段中的 Django 千位分隔符

问题描述 投票:0回答:2

如何为模型表单中的数字输入字段添加千位分隔符。我在模板中使用“load humanize”和“|intcomma”来格式化一些数字。但是我如何对模型表单中的字段执行此操作。

django django-models django-forms django-templates django-views
2个回答
0
投票

您可以按照

此处
所述设置USE_THOUSAND_SEPARATOR=True来实现此目的。


0
投票

其实我觉得你应该尝试在客户端用JS来处理它。这也是我的解决方案。 这就是我解决问题的方法:

  1. 创建通用数字格式JS函数:
    function number_format (number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
      var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
          var k = Math.pow(10, prec);
          return '' + Math.round(n * k) / k;
        };
      // Fix for IE parseFloat(0.55).toFixed(0) = 0;
      s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
      if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
      }
      if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
      }
      return s.join(dec);
    }
  1. 创建千位分隔符特定代码:

    function thousand_sep(tagID, x_value) {
        if (x_value == "") {
        document.getElementById(tagID).value = "";
        return;
        }
        document.getElementById(tagID).value = number_format(x_value, 0, ',', ' ');
    }
  1. 将代码添加到 Django forms.py 中的 ModelForm 中:

    class AnyForm(forms.ModelForm):
    
        def __init__(self, *args, **kwargs):
            super(AnyForm, self).__init__(*args, **kwargs)
            self.fields['numeric_field'].widget.attrs = {
                'oninput': "thousand_sep(this.id, this.value)",
            }

这对我有用。希望能帮助到你。 (抱歉JS代码格式,由于某种原因没有将其突出显示为代码)

© www.soinside.com 2019 - 2024. All rights reserved.