如何为模型表单中的数字输入字段添加千位分隔符。我在模板中使用“load humanize”和“|intcomma”来格式化一些数字。但是我如何对模型表单中的字段执行此操作。
其实我觉得你应该尝试在客户端用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);
}
function thousand_sep(tagID, x_value) {
if (x_value == "") {
document.getElementById(tagID).value = "";
return;
}
document.getElementById(tagID).value = number_format(x_value, 0, ',', ' ');
}
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代码格式,由于某种原因没有将其突出显示为代码)