Here's the change I'd like to propose. On line 78 of
django/views/generic/edit.py:
{{{
def form_invalid(self, form, **kwargs):
"""
If the form is invalid, re-render the context data with the
data-filled form and errors.
"""
return self.render_to_response(self.get_context_data(form=form),
**kwargs)
}}}
This would permit doing something like this:
{{{
response = super(AjaxableResponseMixin, self).form_invalid(form,
status=400)
}}}
Alternatively, a failure status code property may be more intuitive to
developers, but I think the above permits a bit more flexibility in terms
of modifying other attributes of the response as well.
--
Ticket URL: <https://code.djangoproject.com/ticket/22591>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
The main issue I see with this is that you're hijacking `kwargs` for
`render_to_response()`. It seems equally likely that someone could propose
passing them to `get_context_data()`. To achieve what you're after, I
wonder if it would be better to override `render_to_response()` with
something like:
{{{
form = context.get('form')
if form and not form.is_valid():
response_kwargs['status'] = 400
super().render_to_response(context, **response_kwargs)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/22591#comment:1>
* status: new => closed
* resolution: => wontfix
--
Ticket URL: <https://code.djangoproject.com/ticket/22591#comment:2>
Comment (by Thomas Güttler):
http status code "200" on POST and invalid data is a bit strange. Django
does this since ages, nevertheless I think there should at least be simple
way to specify a different http status code.
Maybe give [https://docs.djangoproject.com/en/2.2/ref/class-based-views
/mixins-editing/#formmixin FormMixin] an overwritable attribute
http_status_on_invalid. This
should default to the old "200", but would allow subclasses to overwrite
it easily without coding.
--
Ticket URL: <https://code.djangoproject.com/ticket/22591#comment:3>
* cc: Adam Wróbel (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/22591#comment:4>