diff --git a/django/forms/fields.py b/django/forms/fields.py index 100264247a..1ce36c199c 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -486,6 +486,10 @@ class DateTimeField(BaseTemporalField): if isinstance(value, list): # Input comes from a SplitDateTimeWidget, for example. So, it's two # components: date and time. + warnings.warn( + 'Using SplitDateTimeWidget with DateTimeField is deprecated. ' + 'Use SplitDateTimeField instead.', + PendingDeprecationWarning, stacklevel=2) if len(value) != 2: raise ValidationError(self.error_messages['invalid'], code='invalid') if value[0] in self.empty_values and value[1] in self.empty_values: diff --git a/docs/internals/deprecation.txt b/docs/internals/deprecation.txt index 514561e1ff..34e974cea3 100644 --- a/docs/internals/deprecation.txt +++ b/docs/internals/deprecation.txt @@ -215,6 +215,9 @@ these changes. * ``django.forms.get_declared_fields`` will be removed. +* The ability to use a ``SplitDateTimeWidget`` with ``DateTimeField`` will be + removed. + * The ``WSGIRequest.REQUEST`` property will be removed. * The class ``django.utils.datastructures.MergeDict`` will be removed. diff --git a/docs/ref/forms/fields.txt b/docs/ref/forms/fields.txt index 62273fd38e..42d639e8c7 100644 --- a/docs/ref/forms/fields.txt +++ b/docs/ref/forms/fields.txt @@ -458,6 +458,12 @@ For each field, we describe the default widget used if you don't specify See also :ref:`format localization `. + .. deprecated:: 1.7 + + The ability to use :class:`SplitDateTimeWidget` with ``DateTimeField`` + has been deprecated and will be removed in Django 1.9. Use + :class:`SplitDateTimeField` instead. + ``DecimalField`` ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index 9fcad38931..fdbf63526e 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -1063,3 +1063,10 @@ the arguments may have been evaluated at query time. The ``ADMIN_FOR`` feature, part of the admindocs, has been removed. You can remove the setting from your configuration at your convenience. + +``SplitDateTimeWidget`` with ``DateTimeField`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``SplitDateTimeWidget`` support in :class:`~django.forms.DateTimeField` is +deprecated, use ``SplitDateTimeWidget`` with +:class:`~django.forms.SplitDateTimeField` instead. diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py index 4bbed3f0a9..96a9f0dcb1 100644 --- a/tests/forms_tests/tests/test_widgets.py +++ b/tests/forms_tests/tests/test_widgets.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import copy import datetime +import warnings from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase from django.core.files.uploadedfile import SimpleUploadedFile @@ -1092,18 +1093,22 @@ class WidgetTests(TestCase): class SplitDateForm(Form): field = DateTimeField(widget=SplitDateTimeWidget, required=False) - form = SplitDateForm({'field': ''}) - self.assertTrue(form.is_valid()) - form = SplitDateForm({'field': ['', '']}) - self.assertTrue(form.is_valid()) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=PendingDeprecationWarning) + form = SplitDateForm({'field': ''}) + self.assertTrue(form.is_valid()) + form = SplitDateForm({'field': ['', '']}) + self.assertTrue(form.is_valid()) class SplitDateRequiredForm(Form): field = DateTimeField(widget=SplitDateTimeWidget, required=True) - form = SplitDateRequiredForm({'field': ''}) - self.assertFalse(form.is_valid()) - form = SplitDateRequiredForm({'field': ['', '']}) - self.assertFalse(form.is_valid()) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=PendingDeprecationWarning) + form = SplitDateRequiredForm({'field': ''}) + self.assertFalse(form.is_valid()) + form = SplitDateRequiredForm({'field': ['', '']}) + self.assertFalse(form.is_valid()) class LiveWidgetTests(AdminSeleniumWebDriverTestCase):