Ticket #12420: t12420_5.diff
File t12420_5.diff, 3.7 KB (added by , 15 years ago) |
---|
-
django/forms/models.py
diff --git a/django/forms/models.py b/django/forms/models.py index 0039516..e756bf3 100644
a b def construct_instance(form, instance, fields=None, exclude=None): 48 48 continue 49 49 if exclude and f.name in exclude: 50 50 continue 51 # OneToOneField doesn't allow assignment of None. Guard against that52 # instead of allowing it and throwing an error.53 if isinstance(f, models.OneToOneField) and cleaned_data[f.name] is None:54 continue55 51 # Defer saving file-type fields until after the other fields, so a 56 52 # callable upload_to can use the values from other fields. 57 53 if isinstance(f, models.FileField): -
tests/regressiontests/model_forms_regress/models.py
diff --git a/tests/regressiontests/model_forms_regress/models.py b/tests/regressiontests/model_forms_regress/models.py index 23ac745..871bb6f 100644
a b class RealPerson(models.Model): 47 47 if self.name.lower() == 'anonymous': 48 48 raise ValidationError("Please specify a real name.") 49 49 50 class Author(models.Model): 51 publication = models.OneToOneField(Publication, null=True, blank=True) 52 full_name = models.CharField(max_length=255) 53 54 class Author1(models.Model): 55 publication = models.OneToOneField(Publication, null=False) 56 full_name = models.CharField(max_length=255) -
tests/regressiontests/model_forms_regress/tests.py
diff --git a/tests/regressiontests/model_forms_regress/tests.py b/tests/regressiontests/model_forms_regress/tests.py index 3eeecb2..8680bdc 100644
a b from django.forms.models import modelform_factory 6 6 from django.conf import settings 7 7 from django.test import TestCase 8 8 9 from models import Person, RealPerson, Triple, FilePathModel, Article, Publication, CustomFF 9 from models import Person, RealPerson, Triple, FilePathModel, Article, Publication, CustomFF, Author, Author1 10 10 11 11 12 12 class ModelMultipleChoiceFieldTests(TestCase): … … class CustomModelFormSaveMethod(TestCase): 147 147 self.assertEqual(form.is_valid(), False) 148 148 self.assertEqual(form.errors['__all__'], ['Please specify a real name.']) 149 149 150 class OneToOneFieldTests(TestCase): 151 def test_assignment_of_none(self): 152 class AuthorForm(forms.ModelForm): 153 class Meta: 154 model = Author 155 fields = ['publication', 'full_name'] 156 157 publication = Publication.objects.create(title="Pravda", 158 date_published=date(1991, 8, 22)) 159 author = Author.objects.create(publication=publication, full_name='John Doe') 160 form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author) 161 self.assert_(form.is_valid()) 162 self.assertEqual(form.cleaned_data['publication'], None) 163 author = form.save() 164 #author object returned from form still retains original publication object 165 #that's why we need to retreive it from database again 166 new_author = Author.objects.get(pk=author.pk) 167 self.assertEqual(new_author.publication, None) 168 169 def test_assignment_of_none_null_false(self): 170 class AuthorForm(forms.ModelForm): 171 class Meta: 172 model = Author1 173 fields = ['publication', 'full_name'] 174 175 publication = Publication.objects.create(title="Pravda", 176 date_published=date(1991, 8, 22)) 177 author = Author1.objects.create(publication=publication, full_name='John Doe') 178 form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author) 179 self.assert_(not form.is_valid())