KeyError в /report_save django
У меня возникла проблема при попытке сохранить данные в модели
У меня есть код, который разделяет числа запятой. Если я ввожу число < 1000, я могу сохранить данные и тип поля int. Если число >=1000, я не могу сохранить данные в модель и появляется ошибка
Вот мой код
в моих представлениях:
form=AddReportForm(request.POST)
if form.is_valid():
so_tien=form.cleaned_data["so_tien"]
dien_thoai=form.cleaned_data["dien_thoai"]
daily_report=report(so_tien=so_tien,dien_thoai=dien_thoai)
daily_report.save()
return HttpResponseRedirect(reverse('chi_tiet_hop_dong', kwargs={'so_hd': so_hd}))
мой js код для разделения номера в моем шаблоне:
<script language="JavaScript">
function numberWithCommas(){
var input = document.getElementById('{{ form.so_tien.id_for_label}}');
input.value = parseInt(input.value).toLocaleString()
}
</script>
мой шаблон:
<div class="form-group row">
<div class="col-md-4">Số tiền</div>
<div class="col-md-4">{{ form.so_tien }}</div>
</div>
моя форма:
so_tien=forms.IntegerField(label="Số tiền",widget=forms.TextInput(attrs={"class":"form-control", 'onfocusout': 'numberWithCommas()',}),required=False)
dien_thoai=forms.CharField(label="Điện thoại",max_length=12, widget=forms.TextInput(attrs={"class":"form-control"}))
Пожалуйста, помогите мне решить проблему
Проблема заключается в запятой, когда число больше 1000.
Вариант 1: Удалите запятую перед сохранением формы
if form.is_valid():
so_tien=form.cleaned_data["so_tien"].replace(",","")
dien_thoai=form.cleaned_data["dien_thoai"]
daily_report=report(so_tien=so_tien,dien_thoai=dien_thoai)
daily_report.save()
return HttpResponseRedirect(reverse('chi_tiet_hop_dong', kwargs={'so_hd': so_hd}))
Вариант 2: Измените тип поля "so_tien" в вашей модели на CharField и сделайте миграции снова.
Вариант 3: Используйте тип ввода число (с шагом="1" для целых чисел) в вашей форме.
so_tien=forms.IntegerField(label="Số tiền",widget=forms.TextInput(attrs={"type":"number", "step":"1", "class":"form-control", 'onfocusout': 'numberWithCommas()',}),required=False)
EDIT: Вариант 3 может не работать, потому что "numberWithCommas()" переопределяет входное значение.
