Я пытаюсь передать AJAX простую форму на сервер Django, где одно поле — это идентификатор объекта, который нужно обновить, а другое — логическое поле, в которое должен быть обновлен соответствующий объект. В Javascript я инициализирую новый FormData, добавляю значения формы и отправляю их на сервер с помощью вызова Ajax. Однако, когда для поля данных логической формы установлено значение false
, запрос Ajax завершается ошибкой, говоря, что поле не было установлено.
Форма
from django import forms
class UpdateHazardForm(forms.Form):
pk = forms.IntegerField()
fixed = forms.BooleanField()
соответствующий js-код
var fd = new FormData();
fd.append('pk', pID)
fd.append('fixed', checked)
// Ajax changes to server
$.ajax({
url: "/update_hazard/",
type: 'POST',
data: fd,
dataType: "json",
processData: false,
contentType: false,
success: function(data) {
if (data['success']) {
console.log("success");
}
else{
console.log("not success");
}
}
});
Функция просмотра
@require_POST
@user_passes_test(lambda u: u.is_superuser)
def updateHazard(request):
form = UpdateHazardForm(request.POST)
if form.is_valid():
pk = form.cleaned_data['pk']
fixed = form.cleaned_data['fixed']
hazard = get_object_or_404(Hazard, pk=pk)
hazard.hazard_fixed=fixed
hazard.save()
return JsonResponse({'success': True})
logger.debug(form.errors)
return JsonResponse({'success': False})
При вызове fd.append("fixed", checked)
с проверенным == истинным сообщение ajax успешно. При проверке == false происходит сбой с ошибкой <ul class="errorlist"><li>fixed<ul class="errorlist"><li> This field is required.</li></ul></li></ul>
Я подозреваю, что функция FormData.append(name, value) проверяет значение с помощью оператора if, который терпит неудачу, когда значение является логическим значением false. Я попытался изменить «проверенное» значение на строку с помощью toString(), но это не сработало.
Любая помощь приветствуется. Я бы предпочел сохранить поле формы как BooleanField, чтобы сохранить функцию просмотра простой.