[1.9.x] Fixed #25548 -- Prevented FormView.form_invalid() from discarding its form argument.
Backport of e171a83b15
from master
This commit is contained in:
parent
6aaf6728b5
commit
0154702a98
|
@ -112,7 +112,7 @@ class FormMixin(six.with_metaclass(FormMixinBase, ContextMixin)):
|
||||||
If the form is invalid, re-render the context data with the
|
If the form is invalid, re-render the context data with the
|
||||||
data-filled form and errors.
|
data-filled form and errors.
|
||||||
"""
|
"""
|
||||||
return self.render_to_response(self.get_context_data())
|
return self.render_to_response(self.get_context_data(form=form))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -11,3 +11,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed ``BaseCache.get_or_set()`` with the ``DummyCache`` backend
|
* Fixed ``BaseCache.get_or_set()`` with the ``DummyCache`` backend
|
||||||
(:ticket:`25840`).
|
(:ticket:`25840`).
|
||||||
|
|
||||||
|
* Fixed a regression in ``FormMixin`` causing forms to be validated twice
|
||||||
|
(:ticket:`25548`).
|
||||||
|
|
|
@ -98,6 +98,13 @@ class BasicFormTests(TestCase):
|
||||||
res = self.client.post('/contact/', {'name': "Me", 'message': "Hello"})
|
res = self.client.post('/contact/', {'name': "Me", 'message': "Hello"})
|
||||||
self.assertRedirects(res, '/list/authors/')
|
self.assertRedirects(res, '/list/authors/')
|
||||||
|
|
||||||
|
def test_late_form_validation(self):
|
||||||
|
"""
|
||||||
|
A form can be marked invalid in the form_valid() method (#25548).
|
||||||
|
"""
|
||||||
|
res = self.client.post('/late-validation/', {'name': "Me", 'message': "Hello"})
|
||||||
|
self.assertFalse(res.context['form'].is_valid())
|
||||||
|
|
||||||
|
|
||||||
class ModelFormMixinTests(SimpleTestCase):
|
class ModelFormMixinTests(SimpleTestCase):
|
||||||
def test_get_form(self):
|
def test_get_form(self):
|
||||||
|
|
|
@ -65,6 +65,8 @@ urlpatterns = [
|
||||||
# FormView
|
# FormView
|
||||||
url(r'^contact/$',
|
url(r'^contact/$',
|
||||||
views.ContactView.as_view()),
|
views.ContactView.as_view()),
|
||||||
|
url(r'^late-validation/$',
|
||||||
|
views.LateValidationView.as_view()),
|
||||||
|
|
||||||
# Create/UpdateView
|
# Create/UpdateView
|
||||||
url(r'^edit/artists/create/$',
|
url(r'^edit/artists/create/$',
|
||||||
|
|
|
@ -307,3 +307,13 @@ class NonModelDetail(generic.DetailView):
|
||||||
class ObjectDoesNotExistDetail(generic.DetailView):
|
class ObjectDoesNotExistDetail(generic.DetailView):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Book.does_not_exist.all()
|
return Book.does_not_exist.all()
|
||||||
|
|
||||||
|
|
||||||
|
class LateValidationView(generic.FormView):
|
||||||
|
form_class = ContactForm
|
||||||
|
success_url = reverse_lazy('authors_list')
|
||||||
|
template_name = 'generic_views/form.html'
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
form.add_error(None, 'There is an error')
|
||||||
|
return self.form_invalid(form)
|
||||||
|
|
Loading…
Reference in New Issue