Как заставить ошибки формы Django от Ajax отображаться на экране пользователя?
Возможно, я не совсем ясно мыслю... но мне кажется логичным, что если я отправляю форму через AJAX... ту же самую форму, которую я могу отправить традиционным методом HTML, то я должен иметь возможность получить ошибки формы и отобразить их так же, как и при отправке через HTML? Я, конечно, могу получить form.errors в консоли, если я их распечатаю....., но я не могу понять, как вернуть их в шаблон, чтобы они отобразились на экране пользователя. JSONRESPONSE показывает их на другом экране... но как я могу просто вернуть их на саму форму?
Вот мой взгляд...
class CreateProcedureView(LoginRequiredMixin,CreateView):
model = NewProcedure
form_class = CreateProcedureForm
template_name = 'create_procedure.html'
def form_valid(self, form):
instance = form.save()
return JsonResponse({'success': True })
def form_invalid(self, form):
response = JsonResponse({"error": "there was an error"})
response.status_code = 403 # To announce that the user isn't allowed to publish
return response
def post(self, request, *args, **kwargs):
if "cancel" in request.POST:
return HttpResponseRedirect(reverse('Procedures:procedure_main_menu'))
else:
self.object = None
user = request.user
form_class = self.get_form_class()
form = self.get_form(form_class)
file_form = NewProcedureFilesForm(request.POST, request.FILES)
files = request.FILES.getlist('file[]')
if form.is_valid() and file_form.is_valid():
procedure_instance = form.save(commit=False)
procedure_instance.user = user
procedure_instance.save()
list=[]
for f in files:
procedure_file_instance = NewProcedureFiles(attachments=f, new_procedure=procedure_instance)
procedure_file_instance.save()
return self.form_valid(form)
else:
form_class = self.get_form_class()
form = self.get_form(form_class)
file_form = NewProcedureFilesForm(request.POST, request.FILES)
return self.form_invalid(form)
Вот мой Ajax...
$.ajax({
url: "{% url 'Procedures:create_procedure' %}",
headers: { "X-CSRFToken": token },
method: "post",
data: $("#forms").serialize() + "&status=" + "Submitted",
success: function(data){
alert(data.message);
},
error: function(data){
alert(data.status);
alert(data.responseJSON.error);
}
});
});
например, если у вас есть тег span под формой input
<span id="error_first_name"></span>
используем Jquery для добавления $('#error_first_name").text(data.responseJSON.error.first_name[0])