From e488c1dc0d29f2de0d8bb31db604aa6384b7a60b Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Thu, 25 Feb 2010 17:18:27 +0000 Subject: [PATCH] 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 --- django/forms/models.py | 2 ++ tests/modeltests/model_forms/tests.py | 22 +++++++++++++++++++--- 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()