Django ajax form - redirect to main page after form validation
我有一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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 |
但是,通过验证器重复发送电子邮件时的行为是不同的。错误像以前一样发送到请求,但是用户看不到它,因为似乎请求已重定向到另一个视图...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | {% load i18n %} {% load crispy_forms_tags %} <!-- sideNav --> <form class="form" id="form_patient"> {% csrf_token %} {{ form.as_p}} <button type="submit" class="btn btn-primary" id="sidenav-btn-submit" formmethod="post">{% trans 'Guardar'%} </button> </form> $(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'); }, }); }); }); |
1 2 3 4 5 6 7 8 9 10 | 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}) |
1 2 3 4 5 6 7 8 9 10 11 | 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 |
您是否知道为什么与空白字段或无效电子邮件相关的错误会正确呈现表单错误,但重复的电子邮件会重定向到另一页?
实际上出现问题是因为调用ajax的按钮具有定义为