Показать отдельное число через запятую в django tempalte

У меня проблема, когда пользователь набирает текст в текстовом поле, число не разделяется запятой

пользователь набирает 500000, он показывает 500000, а не 500,000

в моделях

so_tien=models.CharField(max_length=50)

в формах

so_tien=forms.CharField(label="Số tiền",widget=forms.TextInput(attrs={"class":"form-control", 'onclick': 'numberWithCommas()',}),required=False)

файл шаблона

<div class="col-md-4" id="sotien" style="display:none">{{ form.so_tien}}</div>

код javascript numberWithCommas в файле шаблона:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

Спасибо за прочтение

Вы не изменяете значение вашего ввода, вы просто отображаете его, попробуйте присвоить новое значение атрибуту value следующим образом

Пример работы

function numberWithCommas(){
  var input = document.getElementById('input');
  input.value = parseInt(input.value).toLocaleString()
}
<input type="text" id="input" onfocusout="numberWithCommas()">

для django вы можете сделать что-то вроде этого
в forms.py

so_tien=forms.CharField(label="Số tiền",widget=forms.TextInput(attrs={"class":"form-control", 'onfocusout': 'numberWithCommas()',}),required=False)

внутри ваших шаблонов

function numberWithCommas(){
      var input = document.getElementById('{{ form.so_tien.id_for_label}}');
      input.value = parseInt(input.value).toLocaleString()
}

Два простых способа

1> вы можете использовать LOCALIZE для достижения этого с ограниченным контролем

2>Вы можете создать пользовательский тег шаблона django для достижения этого, используя свою собственную логику, например, разделить в обратном порядке и вставить запятую и т.д.

--РЕДАКТИРОВАТЬ--

from django import template
from django.contrib.humanize.templatetags.humanize import intcomma

register = template.Library()

def currency(dollars):
    dollars = round(float(dollars), 2)
    return "$%s%s" % (intcomma(int(dollars)), ("%0.2f" % dollars)[-3:])

register.filter('currency', currency)

Ранее я использовал это для валюты, вы можете изменить это так, как вам удобно. в шаблоне вызовите {{youvalue|currency}}. . Почитайте о тегах шаблонов django.

Для Javascript:

$('.numberfieldclass').keyup(function() {
  var foo = $(this).val().split(",").join(""); // commas
  if (foo.length > 0) {
    foo = foo.match(new RegExp('.{1,3}', 'g')).join(",");
  }
  $(this).val(foo);
});
Вернуться на верх