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

时间:2019-03-26 23:11:18

标签: django django-models django-forms django-templates django-views

如何在ModelForm中为数字输入字段添加千位分隔符。我正在模板中使用“加载人性化”和“ | intcomma”来格式化一些数字。但是我该如何处理模型形式中的字段。

2 个答案:

答案 0 :(得分:0)

您可以按照here所述设置USE_THOUSAND_SEPARATOR=True

答案 1 :(得分:0)

实际上我认为您应该尝试在客户端使用 JS 处理它。这也是我的解决方案。 这就是我解决问题的方法:

  1. 创建通用数字格式JS函数:

    function number_format(数字,小数,dec_point,千分之一){ number = (number + '').replace(/[^0-9+-Ee.]/g, ''); var n = !isFinite(+number) ? 0:+号, prec = !isFinite(+decimals) ? 0 : Math.abs(十进制), sep = (typeofmillion_sep === 'undefined') ? ',' : 千 sep, dec = (typeof dec_point === '未定义') ? '.' :dec_point, s = '', toFixedFix = 函数 (n, prec) { var k = Math.pow(10, prec); 返回 '​​' + Math.round(n * k) / k; }; // 修复 IE parseFloat(0.55).toFixed(0) = 0; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); 如果 (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'); } 返回 s.join(dec); }

  1. 创建千位分隔符具体代码:

    函数千_sep(标签ID,x_value){ 如果(x_value ==“”){ document.getElementById(tagID).value = ""; 返回; } document.getElementById(tagID).value = number_format(x_value, 0, ',', ' '); }

  2. 将代码添加到 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代码格式,因为某些原因没有把它高亮为代码)

相关问题