Tengo un problema que cuando el usuario está escribiendo en el campo de texto, el número no está separado por una coma
el usuario está escribiendo 500000, muestra 500000 no 500,000
en modelos
so_tien=models.PositiveIntegerField(max_length=50)en formas
so_tien=forms.IntegerField(label="Số tiền",widget=forms.NumberInput(attrs={"class":"form-control",'onfocusout': 'numberWithCommas()',}),required=False)archivo de plantilla
<div class="col-md-4" id="sotien" style="display:none">{{ form.so_tien}}</div>número de código javascriptWithCommas en el archivo de plantilla:
<script language="JavaScript"> function numberWithCommas(){ var input = document.getElementById('{{ form.so_tien.id_for_label}}'); input.value = parseInt(input.value).toLocaleString()}
gracias por tu lectura
No está cambiando el valor de su entrada, solo la está mostrando, intente asignar un nuevo valor al atributo de valor como este
function numberWithCommas(){ var input = document.getElementById('input'); input.value = parseInt(input.value).toLocaleString() } <input type="text" id="input" onfocusout="numberWithCommas()"> para django puedes hacer algo como esto
en formularios.py
so_tien=forms.CharField(label="Số tiền",widget=forms.TextInput(attrs={"class":"form-control", 'onfocusout': 'numberWithCommas()',}),required=False)dentro de tus plantillas
function numberWithCommas(){ var input = document.getElementById('{{ form.so_tien.id_for_label}}'); input.value = parseInt(input.value).toLocaleString() }Dos maneras fáciles
1> puede usar LOCALIZAR para lograr esto con un control limitado
2> Puede crear una etiqueta de plantilla de django personalizada para lograr esto usando su propia lógica como dividir en reversa e insertar una coma, etc.
--EDITAR--
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)Anteriormente había usado esto para la moneda, puedes modificarlo como más te convenga. en la llamada de plantilla {{youvalue|currency}} . Lea sobre las etiquetas de plantilla de django.
Para 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); });