summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2014-11-15 13:17:55 +0200
committerTim Graham <timograham@gmail.com>2014-11-21 14:23:17 -0500
commit343162410f9270012e4fdd8396d542b39cc63269 (patch)
treed779c67fa55404cb50243034623f13e1edddf057
parent5b26a014a81ba0d404d46e11d2b45c01d92b97e5 (diff)
Fixed #21753 -- Raised exception when both `form_class` and `fields` are specified.
-rw-r--r--django/views/generic/edit.py4
-rw-r--r--docs/ref/class-based-views/mixins-editing.txt11
-rw-r--r--docs/releases/1.8.txt5
-rw-r--r--docs/topics/class-based-views/generic-editing.txt9
-rw-r--r--tests/generic_views/test_edit.py11
5 files changed, 40 insertions, 0 deletions
diff --git a/django/views/generic/edit.py b/django/views/generic/edit.py
index 4bcef9cb6a..e88dd82958 100644
--- a/django/views/generic/edit.py
+++ b/django/views/generic/edit.py
@@ -121,6 +121,10 @@ class ModelFormMixin(FormMixin, SingleObjectMixin):
"""
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:
return self.form_class
else:
diff --git a/docs/ref/class-based-views/mixins-editing.txt b/docs/ref/class-based-views/mixins-editing.txt
index 1a06e2bb97..3dcf28dae3 100644
--- a/docs/ref/class-based-views/mixins-editing.txt
+++ b/docs/ref/class-based-views/mixins-editing.txt
@@ -115,6 +115,17 @@ ModelFormMixin
:attr:`~django.views.generic.detail.SingleObjectMixin.queryset` attributes,
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**
* :class:`django.views.generic.edit.FormMixin`
diff --git a/docs/releases/1.8.txt b/docs/releases/1.8.txt
index 41a0be4ecc..3175eecf5f 100644
--- a/docs/releases/1.8.txt
+++ b/docs/releases/1.8.txt
@@ -783,6 +783,11 @@ Miscellaneous
``<WSGIRequest: GET '/somepath/'>``). This won't change the behavior of
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:
Features deprecated in 1.8
diff --git a/docs/topics/class-based-views/generic-editing.txt b/docs/topics/class-based-views/generic-editing.txt
index 8490f0d4fb..be087d7758 100644
--- a/docs/topics/class-based-views/generic-editing.txt
+++ b/docs/topics/class-based-views/generic-editing.txt
@@ -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
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
Omitting the ``fields`` attribute was previously allowed and resulted in a
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:
.. snippet::
diff --git a/tests/generic_views/test_edit.py b/tests/generic_views/test_edit.py
index 51f4ac6104..bd48aef11b 100644
--- a/tests/generic_views/test_edit.py
+++ b/tests/generic_views/test_edit.py
@@ -14,6 +14,7 @@ from django.views.generic.edit import FormMixin, ModelFormMixin, CreateView
from . import views
from .models import Artist, Author
+from .test_forms import AuthorForm
class FormMixinTests(TestCase):
@@ -206,6 +207,16 @@ class CreateViewTests(TestCase):
with self.assertRaisesMessage(ImproperlyConfigured, message):
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')
class UpdateViewTests(TestCase):