Fixed #21753 -- Raised exception when both `form_class` and `fields` are specified.
This commit is contained in:
parent
5b26a014a8
commit
343162410f
|
@ -121,6 +121,10 @@ class ModelFormMixin(FormMixin, SingleObjectMixin):
|
||||||
"""
|
"""
|
||||||
Returns the form class to use in this view.
|
Returns the form class to use in this view.
|
||||||
"""
|
"""
|
||||||
|
if self.fields is not None and self.form_class:
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"Specifying both 'fields' and 'form_class' is not permitted."
|
||||||
|
)
|
||||||
if self.form_class:
|
if self.form_class:
|
||||||
return self.form_class
|
return self.form_class
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -115,6 +115,17 @@ ModelFormMixin
|
||||||
:attr:`~django.views.generic.detail.SingleObjectMixin.queryset` attributes,
|
:attr:`~django.views.generic.detail.SingleObjectMixin.queryset` attributes,
|
||||||
describing the type of object that the ``ModelForm`` is manipulating.
|
describing the type of object that the ``ModelForm`` is manipulating.
|
||||||
|
|
||||||
|
If you specify both the
|
||||||
|
:attr:`~django.views.generic.edit.ModelFormMixin.fields` and
|
||||||
|
:attr:`~django.views.generic.edit.FormMixin.form_class` attributes, an
|
||||||
|
:exc:`~django.core.exceptions.ImproperlyConfigured` exception will be
|
||||||
|
raised.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.8
|
||||||
|
|
||||||
|
Previously if both ``fields`` and ``form_class`` were specified,
|
||||||
|
``fields`` was silently ignored.
|
||||||
|
|
||||||
**Mixins**
|
**Mixins**
|
||||||
|
|
||||||
* :class:`django.views.generic.edit.FormMixin`
|
* :class:`django.views.generic.edit.FormMixin`
|
||||||
|
|
|
@ -783,6 +783,11 @@ Miscellaneous
|
||||||
``<WSGIRequest: GET '/somepath/'>``). This won't change the behavior of
|
``<WSGIRequest: GET '/somepath/'>``). This won't change the behavior of
|
||||||
the :class:`~django.views.debug.SafeExceptionReporterFilter` class.
|
the :class:`~django.views.debug.SafeExceptionReporterFilter` class.
|
||||||
|
|
||||||
|
* Class-based views that use :class:`~django.views.generic.edit.ModelFormMixin`
|
||||||
|
will raise an :exc:`~django.core.exceptions.ImproperlyConfigured` exception
|
||||||
|
when both the ``fields`` and ``form_class`` attributes are specified.
|
||||||
|
Previously, ``fields`` was silently ignored.
|
||||||
|
|
||||||
.. _deprecated-features-1.8:
|
.. _deprecated-features-1.8:
|
||||||
|
|
||||||
Features deprecated in 1.8
|
Features deprecated in 1.8
|
||||||
|
|
|
@ -139,11 +139,20 @@ inner ``Meta`` class on :class:`~django.forms.ModelForm`. Unless you define the
|
||||||
form class in another way, the attribute is required and the view will raise
|
form class in another way, the attribute is required and the view will raise
|
||||||
an :exc:`~django.core.exceptions.ImproperlyConfigured` exception if it's not.
|
an :exc:`~django.core.exceptions.ImproperlyConfigured` exception if it's not.
|
||||||
|
|
||||||
|
If you specify both the :attr:`~django.views.generic.edit.ModelFormMixin.fields`
|
||||||
|
and :attr:`~django.views.generic.edit.FormMixin.form_class` attributes, an
|
||||||
|
:exc:`~django.core.exceptions.ImproperlyConfigured` exception will be raised.
|
||||||
|
|
||||||
.. versionchanged:: 1.8
|
.. versionchanged:: 1.8
|
||||||
|
|
||||||
Omitting the ``fields`` attribute was previously allowed and resulted in a
|
Omitting the ``fields`` attribute was previously allowed and resulted in a
|
||||||
form with all of the model's fields.
|
form with all of the model's fields.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.8
|
||||||
|
|
||||||
|
Previously if both ``fields`` and ``form_class`` were specified,
|
||||||
|
``fields`` was silently ignored.
|
||||||
|
|
||||||
Finally, we hook these new views into the URLconf:
|
Finally, we hook these new views into the URLconf:
|
||||||
|
|
||||||
.. snippet::
|
.. snippet::
|
||||||
|
|
|
@ -14,6 +14,7 @@ from django.views.generic.edit import FormMixin, ModelFormMixin, CreateView
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
from .models import Artist, Author
|
from .models import Artist, Author
|
||||||
|
from .test_forms import AuthorForm
|
||||||
|
|
||||||
|
|
||||||
class FormMixinTests(TestCase):
|
class FormMixinTests(TestCase):
|
||||||
|
@ -206,6 +207,16 @@ class CreateViewTests(TestCase):
|
||||||
with self.assertRaisesMessage(ImproperlyConfigured, message):
|
with self.assertRaisesMessage(ImproperlyConfigured, message):
|
||||||
MyCreateView().get_form_class()
|
MyCreateView().get_form_class()
|
||||||
|
|
||||||
|
def test_define_both_fields_and_form_class(self):
|
||||||
|
class MyCreateView(CreateView):
|
||||||
|
model = Author
|
||||||
|
form_class = AuthorForm
|
||||||
|
fields = ['name']
|
||||||
|
|
||||||
|
message = "Specifying both 'fields' and 'form_class' is not permitted."
|
||||||
|
with self.assertRaisesMessage(ImproperlyConfigured, message):
|
||||||
|
MyCreateView().get_form_class()
|
||||||
|
|
||||||
|
|
||||||
@override_settings(ROOT_URLCONF='generic_views.urls')
|
@override_settings(ROOT_URLCONF='generic_views.urls')
|
||||||
class UpdateViewTests(TestCase):
|
class UpdateViewTests(TestCase):
|
||||||
|
|
Loading…
Reference in New Issue