summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2013-06-07 15:36:31 +0100
committerAndrew Godwin <andrew@aeracode.org>2013-06-07 15:36:31 +0100
commitc7aa4b5338e6bcf62f66eb53b309aa3a69b9a55d (patch)
treed21ecd10098fca7e4a3c12852e9596c19db155ad
parent4492f06408828355a827824c805fd631a3b59d1b (diff)
Field encoding
-rw-r--r--django/db/migrations/writer.py20
-rw-r--r--tests/migrations/test_writer.py3
2 files changed, 22 insertions, 1 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py
index b32bb987d9..b21c6c9648 100644
--- a/django/db/migrations/writer.py
+++ b/django/db/migrations/writer.py
@@ -1,5 +1,6 @@
import datetime
import types
+from django.db import models
class MigrationWriter(object):
@@ -85,6 +86,25 @@ class MigrationWriter(object):
# Simple types
elif isinstance(value, (int, long, float, str, unicode, bool, types.NoneType)):
return repr(value), set()
+ # Django fields
+ elif isinstance(value, models.Field):
+ attr_name, path, args, kwargs = value.deconstruct()
+ module, name = path.rsplit(".", 1)
+ if module == "django.db.models":
+ imports = set()
+ else:
+ imports = set("import %s" % module)
+ name = path
+ arg_strings = []
+ for arg in args:
+ arg_string, arg_imports = cls.serialize(arg)
+ arg_strings.append(arg_string)
+ imports.update(arg_imports)
+ for kw, arg in kwargs.items():
+ arg_string, arg_imports = cls.serialize(arg)
+ imports.update(arg_imports)
+ arg_strings.append("%s=%s" % (kw, arg_string))
+ return "%s(%s)" % (name, ", ".join(arg_strings)), imports
# Functions
elif isinstance(value, (types.FunctionType, types.BuiltinFunctionType)):
# Special-cases, as these don't have im_class
diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py
index 8c1753e794..0581d6a4bd 100644
--- a/tests/migrations/test_writer.py
+++ b/tests/migrations/test_writer.py
@@ -2,7 +2,7 @@
import datetime
from django.test import TransactionTestCase
from django.db.migrations.writer import MigrationWriter
-from django.db import migrations
+from django.db import models, migrations
class WriterTests(TransactionTestCase):
@@ -56,6 +56,7 @@ class WriterTests(TransactionTestCase):
migration = type("Migration", (migrations.Migration,), {
"operations": [
migrations.DeleteModel("MyModel"),
+ migrations.AddField("OtherModel", "field_name", models.DateTimeField(default=datetime.datetime.utcnow))
],
"dependencies": [("testapp", "some_other_one")],
})