diff options
| author | Tim Graham <timograham@gmail.com> | 2016-08-11 15:18:48 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-08-24 17:50:10 -0400 |
| commit | 4bc6b939944183533ae74791d21282e613f63a96 (patch) | |
| tree | 932a46a25fb5bfb8fa4b514762a4a2938f6f2b12 /tests | |
| parent | 426bca002c7902ceae230e0ce08a76dd6b6d3a06 (diff) | |
Fixed #27039 -- Fixed empty data fallback to model field default in model forms.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_forms/models.py | 1 | ||||
| -rw-r--r-- | tests/model_forms/tests.py | 43 |
2 files changed, 42 insertions, 2 deletions
diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py index ec39e5ad1f..b00e6a2658 100644 --- a/tests/model_forms/models.py +++ b/tests/model_forms/models.py @@ -122,6 +122,7 @@ class PublicationDefaults(models.Model): date_published = models.DateField(default=datetime.date.today) mode = models.CharField(max_length=2, choices=MODE_CHOICES, default=default_mode) category = models.IntegerField(choices=CATEGORY_CHOICES, default=default_category) + active = models.BooleanField(default=True) class Author(models.Model): diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 085a95733e..5d8fe4bd91 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -565,6 +565,42 @@ class ModelFormBaseTest(TestCase): self.assertEqual(list(OrderFields2.base_fields), ['slug', 'name']) + def test_default_populated_on_optional_field(self): + class PubForm(forms.ModelForm): + mode = forms.CharField(max_length=255, required=False) + + class Meta: + model = PublicationDefaults + fields = ('mode',) + + # Empty data uses the model field default. + mf1 = PubForm({}) + self.assertEqual(mf1.errors, {}) + m1 = mf1.save(commit=False) + self.assertEqual(m1.mode, 'di') + self.assertEqual(m1._meta.get_field('mode').get_default(), 'di') + + # Blank data doesn't use the model field default. + mf2 = PubForm({'mode': ''}) + self.assertEqual(mf2.errors, {}) + m2 = mf2.save(commit=False) + self.assertEqual(m2.mode, '') + + def test_default_not_populated_on_optional_checkbox_input(self): + class PubForm(forms.ModelForm): + class Meta: + model = PublicationDefaults + fields = ('active',) + + # Empty data doesn't use the model default because CheckboxInput + # doesn't have a value in HTML form submission. + mf1 = PubForm({}) + self.assertEqual(mf1.errors, {}) + m1 = mf1.save(commit=False) + self.assertIs(m1.active, False) + self.assertIsInstance(mf1.fields['active'].widget, forms.CheckboxInput) + self.assertIs(m1._meta.get_field('active').get_default(), True) + class FieldOverridesByFormMetaForm(forms.ModelForm): class Meta: @@ -774,7 +810,10 @@ class UniqueTest(TestCase): title = 'Boss' isbn = '12345' DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn) - form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': isbn}) + form = DerivedBookForm({ + 'title': 'Other', 'author': self.writer.pk, 'isbn': isbn, + 'suffix1': '1', 'suffix2': '2', + }) self.assertFalse(form.is_valid()) self.assertEqual(len(form.errors), 1) self.assertEqual(form.errors['isbn'], ['Derived book with this Isbn already exists.']) @@ -2491,7 +2530,7 @@ class OtherModelFormTests(TestCase): class PublicationDefaultsForm(forms.ModelForm): class Meta: model = PublicationDefaults - fields = '__all__' + fields = ('title', 'date_published', 'mode', 'category') self.maxDiff = 2000 form = PublicationDefaultsForm() |
