Ticket #12420: t12420_4.diff
File t12420_4.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 f343a1c..45b35a0 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 376586e..e2f0e19 100644
a b class CustomFileField(models.FileField): 37 37 38 38 class CustomFF(models.Model): 39 39 f = CustomFileField(upload_to='unused', blank=True) 40 41 class Author(models.Model): 42 publication = models.OneToOneField(Publication, null=True, blank=True) 43 full_name = models.CharField(max_length=255) 44 45 class Author1(models.Model): 46 publication = models.OneToOneField(Publication, null=False) 47 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 57d5655..4324110 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, Triple, FilePathModel, Article, Publication, CustomFF 9 from models import Person, Triple, FilePathModel, Article, Publication, CustomFF, Author, Author1 10 10 11 11 class ModelMultipleChoiceFieldTests(TestCase): 12 12 … … class ModelChoiceIteratorTests(TestCase): 134 134 date_published=date(1991, 8, 22)) 135 135 f = Form() 136 136 self.assertEqual(len(f.fields["publications"].choices), 1) 137 138 class OneToOneFieldTests(TestCase): 139 def test_assignment_of_none(self): 140 class AuthorForm(forms.ModelForm): 141 class Meta: 142 model = Author 143 fields = ['publication', 'full_name'] 144 145 publication = Publication.objects.create(title="Pravda", 146 date_published=date(1991, 8, 22)) 147 author = Author.objects.create(publication=publication, full_name='John Doe') 148 form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author) 149 self.assert_(form.is_valid()) 150 self.assertEqual(form.cleaned_data['publication'], None) 151 author = form.save() 152 #author object returned from form still retains original publication object 153 #that's why we need to retreive it from database again 154 new_author = Author.objects.get(pk=author.pk) 155 self.assertEqual(new_author.publication, None) 156 157 def test_assignment_of_none_null_false(self): 158 class AuthorForm(forms.ModelForm): 159 class Meta: 160 model = Author1 161 fields = ['publication', 'full_name'] 162 163 publication = Publication.objects.create(title="Pravda", 164 date_published=date(1991, 8, 22)) 165 author = Author1.objects.create(publication=publication, full_name='John Doe') 166 form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author) 167 self.assert_(not form.is_valid())