summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2014-02-09 11:17:13 +0000
committerAndrew Godwin <andrew@aeracode.org>2014-02-09 11:17:38 +0000
commit97a8fd4682b27a3a9f280e661e58db4bae55590a (patch)
tree1484be61a45117bfbb438138a9a2b451a2b9221c
parent4f8e8a6ec2e449e7a6c2e89f011c744ec6874c82 (diff)
Fixed #21954: Raise nice error when serializing datetimes with timezones
-rw-r--r--django/db/migrations/writer.py7
-rw-r--r--tests/migrations/test_writer.py3
2 files changed, 9 insertions, 1 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py
index debbadeded..1b9cdb886e 100644
--- a/django/db/migrations/writer.py
+++ b/django/db/migrations/writer.py
@@ -212,7 +212,12 @@ class MigrationWriter(object):
strings.append((k_string, v_string))
return "{%s}" % (", ".join("%s: %s" % (k, v) for k, v in strings)), imports
# Datetimes
- elif isinstance(value, (datetime.datetime, datetime.date)):
+ elif isinstance(value, datetime.datetime):
+ if value.tzinfo is not None:
+ raise ValueError("Cannot serialize datetime values with timezones. Either use a callable value for default or remove the timezone.")
+ return repr(value), set(["import datetime"])
+ # Dates
+ elif isinstance(value, datetime.date):
return repr(value), set(["import datetime"])
# Settings references
elif isinstance(value, SettingsReference):
diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py
index 14dee65a51..8bdce5d8c0 100644
--- a/tests/migrations/test_writer.py
+++ b/tests/migrations/test_writer.py
@@ -13,6 +13,7 @@ from django.conf import settings
from django.utils import six
from django.utils.deconstruct import deconstructible
from django.utils.translation import ugettext_lazy as _
+from django.utils.timezone import get_default_timezone
class WriterTests(TestCase):
@@ -78,6 +79,8 @@ class WriterTests(TestCase):
self.assertSerializedEqual(datetime.datetime.today)
self.assertSerializedEqual(datetime.date.today())
self.assertSerializedEqual(datetime.date.today)
+ with self.assertRaises(ValueError):
+ self.assertSerializedEqual(datetime.datetime(2012, 1, 1, 1, 1, tzinfo=get_default_timezone()))
# Classes
validator = RegexValidator(message="hello")
string, imports = MigrationWriter.serialize(validator)