У меня есть sidenav_form
, который отправляется с помощью сообщения ajax в представление с именем form_validation
. Ошибки проверки для пустых полей или недействительный адрес электронной почты отображаются правильно, так как при отправке формы и передаче в представление, представление отображает форму, отображающую ошибки. Вот вывод консоли:
<ul class="errorlist"><li>email<ul class="errorlist"><li>Required Field</li></ul></li></ul>
[08/Feb/2020 13:26:37] "POST /patients/validate_form/ HTTP/1.1" 200 1253
Однако поведение при передаче валидатора для повторного электронного письма отличается. Ошибка отправляется на запрос, как и раньше, но пользователь не видит его, так как кажется, что запрос перенаправляет в другое представление ...
<ul class="errorlist"><li>email<ul class="errorlist"><li>This email has already been taken.</li></ul></li></ul>
[08/Feb/2020 13:26:40] "POST /patient/ HTTP/1.1" 200 7769
[08/Feb/2020 13:26:40] "POST /patients/validate_form/ HTTP/1.1" 200 1279
sidenav_form.html
выглядит следующим образом:
{% load i18n %}
{% load crispy_forms_tags %}
<!-- sideNav -->
<div class="inside_sidenav">
<form class="form" id="form_patient">
{% csrf_token %}
{{ form.as_p}}
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary" id="sidenav-btn-submit" formmethod="post">{% trans 'Guardar'%}
</button>
</div>
</form>
</div>
</div>
<script>
$(function () {
// SUBMIT DATA
$('#sidenav-btn-submit').click(function () {
console.log('noinstance')
var url = "{% url 'patients:validate_form' %}";
var formb = $('#form_patient');
console.log(formb.serialize());
$.ajax({
url: url,
data: formb.serialize(),
type: "POST",
headers: { "X-CSRFToken": '{{ csrf_token }}' },
dataType: 'json',
success: function (data) {
$('#mySidenav').html(data);
openNav();
},
error: function (data) {
$('#mySidenav').html(data.responseText);
console.log('no ajax2');
},
});
});
});
</script>
form_validation
просмотр проверяет правильность формы или нет. Это выглядит следующим образом:
def validate_form(request, patient_id=None, user_id=None):
form_initial_data = request.POST
if request.method == 'POST':
print(form_initial_data)
form = UserForm(form_initial_data)
if form.is_valid():
print('Form2 is valid')
# DO SOMETHING
print(form.errors)
return render(request, 'patients/sidenav_form.html', {'form1': form})
form
имеет следующий валидатор:
def clean_email(self):
email = self.cleaned_data["email"]
if not self.instance.pk:
try:
User.objects.get(email=email)
except User.DoesNotExist:
return email
print('Repeated email')
raise ValidationError(_("This email has already been taken."))
return email
Есть ли у вас какие-либо идеи, почему ошибки, связанные с пустыми полями или неверный адрес электронной почты правильно отображает ошибки формы, но повторный адрес электронной почты перенаправляет на другую страницу?