summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/migrations/writer.py15
-rw-r--r--tests/migrations/test_writer.py2
2 files changed, 5 insertions, 12 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py
index 333f39d6e0..0ee737811d 100644
--- a/django/db/migrations/writer.py
+++ b/django/db/migrations/writer.py
@@ -148,18 +148,9 @@ class MigrationWriter(object):
return cls.serialize_deconstructed(path, args, kwargs)
# Functions
elif isinstance(value, (types.FunctionType, types.BuiltinFunctionType)):
- # Special-cases, as these don't have im_class
- special_cases = [
- (datetime.datetime.now, "datetime.datetime.now", ["import datetime"]),
- (datetime.datetime.utcnow, "datetime.datetime.utcnow", ["import datetime"]),
- (datetime.date.today, "datetime.date.today", ["import datetime"]),
- ]
- for func, string, imports in special_cases:
- if func == value: # For some reason "utcnow is not utcnow"
- return string, set(imports)
- # Method?
- if hasattr(value, "im_class"):
- klass = value.im_class
+ # @classmethod?
+ if getattr(value, "__self__", None) and isinstance(value.__self__, type):
+ klass = value.__self__
module = klass.__module__
return "%s.%s.%s" % (module, klass.__name__, value.__name__), set(["import %s" % module])
elif hasattr(value, 'deconstruct'):
diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py
index dbee0d1130..3e6fe50793 100644
--- a/tests/migrations/test_writer.py
+++ b/tests/migrations/test_writer.py
@@ -73,6 +73,8 @@ class WriterTests(TestCase):
# Datetime stuff
self.assertSerializedEqual(datetime.datetime.utcnow())
self.assertSerializedEqual(datetime.datetime.utcnow)
+ self.assertSerializedEqual(datetime.datetime.today())
+ self.assertSerializedEqual(datetime.datetime.today)
self.assertSerializedEqual(datetime.date.today())
self.assertSerializedEqual(datetime.date.today)
# Django fields