From 0b59ea3343ef6f035064cfae1608f54c5a3fd147 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Tue, 6 Sep 2016 17:41:54 -0400 Subject: [1.10.x] Fixed #27186 -- Fixed model form default fallback for MultiWidget, FileInput, SplitDateTimeWidget, SelectDateWidget, and SplitArrayWidget. Thanks Matt Westcott for the review. Backport of 3507d4e773aa9ff2336e7230ba231c4ba6eb568f from master --- tests/model_forms/models.py | 2 ++ tests/model_forms/tests.py | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) (limited to 'tests/model_forms') diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py index dad245ba78..9898022cca 100644 --- a/tests/model_forms/models.py +++ b/tests/model_forms/models.py @@ -120,9 +120,11 @@ class PublicationDefaults(models.Model): CATEGORY_CHOICES = ((1, 'Games'), (2, 'Comics'), (3, 'Novel')) title = models.CharField(max_length=30) date_published = models.DateField(default=datetime.date.today) + datetime_published = models.DateTimeField(default=datetime.datetime(2000, 1, 1)) 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) + file = models.FileField(default='default.txt') class Author(models.Model): diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 593e18fdaa..f2931262c2 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -601,6 +601,58 @@ class ModelFormBaseTest(TestCase): m1 = mf1.save(commit=False) self.assertEqual(m1.mode, mode) + def test_default_splitdatetime_field(self): + class PubForm(forms.ModelForm): + datetime_published = forms.SplitDateTimeField(required=False) + + class Meta: + model = PublicationDefaults + fields = ('datetime_published',) + + mf1 = PubForm({}) + self.assertEqual(mf1.errors, {}) + m1 = mf1.save(commit=False) + self.assertEqual(m1.datetime_published, datetime.datetime(2000, 1, 1)) + + mf2 = PubForm({'datetime_published_0': '2010-01-01', 'datetime_published_1': '0:00:00'}) + self.assertEqual(mf2.errors, {}) + m2 = mf2.save(commit=False) + self.assertEqual(m2.datetime_published, datetime.datetime(2010, 1, 1)) + + def test_default_filefield(self): + class PubForm(forms.ModelForm): + class Meta: + model = PublicationDefaults + fields = ('file',) + + mf1 = PubForm({}) + self.assertEqual(mf1.errors, {}) + m1 = mf1.save(commit=False) + self.assertEqual(m1.file.name, 'default.txt') + + mf2 = PubForm({}, {'file': SimpleUploadedFile('name', b'foo')}) + self.assertEqual(mf2.errors, {}) + m2 = mf2.save(commit=False) + self.assertEqual(m2.file.name, 'name') + + def test_selectdatewidget(self): + class PubForm(forms.ModelForm): + date_published = forms.DateField(required=False, widget=forms.SelectDateWidget) + + class Meta: + model = PublicationDefaults + fields = ('date_published',) + + mf1 = PubForm({}) + self.assertEqual(mf1.errors, {}) + m1 = mf1.save(commit=False) + self.assertEqual(m1.date_published, datetime.date.today()) + + mf2 = PubForm({'date_published_year': '2010', 'date_published_month': '1', 'date_published_day': '1'}) + self.assertEqual(mf2.errors, {}) + m2 = mf2.save(commit=False) + self.assertEqual(m2.date_published, datetime.date(2010, 1, 1)) + class FieldOverridesByFormMetaForm(forms.ModelForm): class Meta: -- cgit v1.3