diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2013-10-13 11:54:11 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2013-10-13 11:58:12 +0200 |
| commit | ddff6522fa72aacc7475ba5cd4bf8683ff12b8c7 (patch) | |
| tree | 3b9825e5f0382c00df4cd29ae658f1dd4470427d | |
| parent | 503092b09a9def93f7f5828bbf87cc26147c5b6c (diff) | |
[1.6.x] Fixed #19560 -- Identified field in warning for naive datetime.
Thanks gcc for the report and vajrasky for the patch.
Backport of 570d9c2678d6cc564f9c70138554af8f7ce9ec49 from master.
| -rw-r--r-- | django/db/models/fields/__init__.py | 10 | ||||
| -rw-r--r-- | docs/topics/i18n/timezones.txt | 5 | ||||
| -rw-r--r-- | tests/timezones/tests.py | 15 |
3 files changed, 19 insertions, 11 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 0621ef912e..adb07cfa94 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -842,8 +842,9 @@ class DateTimeField(DateField): # local time. This won't work during DST change, but we can't # do much about it, so we let the exceptions percolate up the # call stack. - warnings.warn("DateTimeField received a naive datetime (%s)" - " while time zone support is active." % value, + warnings.warn("DateTimeField %s.%s received a naive datetime " + "(%s) while time zone support is active." % + (self.model.__name__, self.name, value), RuntimeWarning) default_timezone = timezone.get_default_timezone() value = timezone.make_aware(value, default_timezone) @@ -896,8 +897,9 @@ class DateTimeField(DateField): # For backwards compatibility, interpret naive datetimes in local # time. This won't work during DST change, but we can't do much # about it, so we let the exceptions percolate up the call stack. - warnings.warn("DateTimeField received a naive datetime (%s)" - " while time zone support is active." % value, + warnings.warn("DateTimeField %s.%s received a naive datetime (%s)" + " while time zone support is active." % + (self.model.__name__, self.name, value), RuntimeWarning) default_timezone = timezone.get_default_timezone() value = timezone.make_aware(value, default_timezone) diff --git a/docs/topics/i18n/timezones.txt b/docs/topics/i18n/timezones.txt index 5ed60d0a94..4652e7e9c1 100644 --- a/docs/topics/i18n/timezones.txt +++ b/docs/topics/i18n/timezones.txt @@ -431,14 +431,15 @@ code: :func:`~django.utils.timezone.now`, Finally, in order to help you locate code that needs upgrading, Django raises a warning when you attempt to save a naive datetime to the database:: - RuntimeWarning: DateTimeField received a naive datetime (2012-01-01 00:00:00) while time zone support is active. + RuntimeWarning: DateTimeField ModelName.field_name received a naive + datetime (2012-01-01 00:00:00) while time zone support is active. During development, you can turn such warnings into exceptions and get a traceback by adding the following to your settings file:: import warnings warnings.filterwarnings( - 'error', r"DateTimeField received a naive datetime", + 'error', r"DateTimeField .* received a naive datetime", RuntimeWarning, r'django\.db\.models\.fields') Fixtures diff --git a/tests/timezones/tests.py b/tests/timezones/tests.py index 43f41ea7fb..6a011c9aff 100644 --- a/tests/timezones/tests.py +++ b/tests/timezones/tests.py @@ -275,7 +275,8 @@ class NewDatabaseTests(TestCase): Event.objects.create(dt=dt) self.assertEqual(len(recorded), 1) msg = str(recorded[0].message) - self.assertTrue(msg.startswith("DateTimeField received a naive datetime")) + self.assertTrue(msg.startswith("DateTimeField Event.dt received " + "a naive datetime")) event = Event.objects.get() # naive datetimes are interpreted in local time self.assertEqual(event.dt, dt.replace(tzinfo=EAT)) @@ -288,7 +289,8 @@ class NewDatabaseTests(TestCase): Event.objects.create(dt=dt) self.assertEqual(len(recorded), 1) msg = str(recorded[0].message) - self.assertTrue(msg.startswith("DateTimeField received a naive datetime")) + self.assertTrue(msg.startswith("DateTimeField Event.dt received " + "a naive datetime")) event = Event.objects.get() self.assertEqual(event.dt, datetime.datetime(2011, 9, 1, tzinfo=EAT)) @@ -301,7 +303,8 @@ class NewDatabaseTests(TestCase): Event.objects.create(dt=dt) self.assertEqual(len(recorded), 1) msg = str(recorded[0].message) - self.assertTrue(msg.startswith("DateTimeField received a naive datetime")) + self.assertTrue(msg.startswith("DateTimeField Event.dt received " + "a naive datetime")) event = Event.objects.get() # naive datetimes are interpreted in local time self.assertEqual(event.dt, dt.replace(tzinfo=EAT)) @@ -315,7 +318,8 @@ class NewDatabaseTests(TestCase): Event.objects.create(dt=dt) self.assertEqual(len(recorded), 1) msg = str(recorded[0].message) - self.assertTrue(msg.startswith("DateTimeField received a naive datetime")) + self.assertTrue(msg.startswith("DateTimeField Event.dt received " + "a naive datetime")) event = Event.objects.get() # microseconds are lost during a round-trip in the database # naive datetimes are interpreted in local time @@ -402,7 +406,8 @@ class NewDatabaseTests(TestCase): self.assertEqual(len(recorded), 3) for warning in recorded: msg = str(warning.message) - self.assertTrue(msg.startswith("DateTimeField received a naive datetime")) + self.assertTrue(msg.startswith("DateTimeField Event.dt " + "received a naive datetime")) @skipUnlessDBFeature('has_zoneinfo_database') def test_query_datetime_lookups(self): |
