summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2010-02-25 17:18:27 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2010-02-25 17:18:27 +0000
commite488c1dc0d29f2de0d8bb31db604aa6384b7a60b (patch)
treeaa6ddcb32958af6252574b2dc6b60bfad0eb2caf
parentc736cbe81645bcb0aa608ae3588edaf01f787806 (diff)
Fixed #12901. Again. Model validation will not be performed on excluded fields that were overridden in the form. Thanks, ammarr.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12590 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/forms/models.py2
-rw-r--r--tests/modeltests/model_forms/tests.py22
2 files changed, 21 insertions, 3 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 96e2008e3f..65fe1a7bd4 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -280,6 +280,8 @@ class BaseModelForm(BaseForm):
# class. See #12901.
elif self._meta.fields and field not in self._meta.fields:
exclude.append(f.name)
+ elif self._meta.exclude and field in self._meta.exclude:
+ exclude.append(f.name)
# Exclude fields that failed form validation. There's no need for
# the model fields to validate them as well.
diff --git a/tests/modeltests/model_forms/tests.py b/tests/modeltests/model_forms/tests.py
index 49ea314bc6..53060105c7 100644
--- a/tests/modeltests/model_forms/tests.py
+++ b/tests/modeltests/model_forms/tests.py
@@ -3,7 +3,7 @@ from django import forms
from models import Category
-class IncompleteCategoryForm(forms.ModelForm):
+class IncompleteCategoryFormWithFields(forms.ModelForm):
"""
A form that replaces the model's url field with a custom one. This should
prevent the model field's validation from being called.
@@ -14,8 +14,24 @@ class IncompleteCategoryForm(forms.ModelForm):
fields = ('name', 'slug')
model = Category
+class IncompleteCategoryFormWithExclude(forms.ModelForm):
+ """
+ A form that replaces the model's url field with a custom one. This should
+ prevent the model field's validation from being called.
+ """
+ url = forms.CharField(required=False)
+
+ class Meta:
+ exclude = ['url']
+ model = Category
+
+
class ValidationTest(TestCase):
- def test_validates_with_replaced_field(self):
- form = IncompleteCategoryForm(data={'name': 'some name', 'slug': 'some-slug'})
+ def test_validates_with_replaced_field_not_specified(self):
+ form = IncompleteCategoryFormWithFields(data={'name': 'some name', 'slug': 'some-slug'})
+ assert form.is_valid()
+
+ def test_validates_with_replaced_field_excluded(self):
+ form = IncompleteCategoryFormWithExclude(data={'name': 'some name', 'slug': 'some-slug'})
assert form.is_valid()