diff options
| author | Andrew Pinkham <code@andrewsforge.com> | 2014-09-08 07:56:35 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-09-08 07:58:06 -0400 |
| commit | 27e7972e63c6f7d6555a724a3b356b4e08b0fefa (patch) | |
| tree | 6037847ecc119f01c2f11a973212202f8bc059bd | |
| parent | 267b121b1e8a87adc61771ec786e6d9037df2462 (diff) | |
[1.7.x] Fixed #22951 -- Checked for types during deep_deconstruct migration serializ
Thanks Sam Hartsfield for the report.
Backport of 4680d25df2 from master
| -rw-r--r-- | django/db/migrations/autodetector.py | 2 | ||||
| -rw-r--r-- | docs/releases/1.7.1.txt | 2 | ||||
| -rw-r--r-- | tests/migrations/test_autodetector.py | 25 |
3 files changed, 28 insertions, 1 deletions
diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index 4a837fbba1..a8647243d9 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -49,7 +49,7 @@ class MigrationAutodetector(object): Used for full comparison for rename/alter; sometimes a single-level deconstruction will not compare correctly. """ - if not hasattr(obj, 'deconstruct'): + if not hasattr(obj, 'deconstruct') or isinstance(obj, type): return obj deconstructed = obj.deconstruct() if isinstance(obj, models.Field): diff --git a/docs/releases/1.7.1.txt b/docs/releases/1.7.1.txt index 90673a826f..2222ef2a7b 100644 --- a/docs/releases/1.7.1.txt +++ b/docs/releases/1.7.1.txt @@ -16,3 +16,5 @@ Bugfixes * Reinstated missing ``CHECK`` SQL clauses which were omitted on some backends when not using migrations (:ticket:`23416`). + +* Fixed serialization of ``type`` objects in migrations (:ticket:`22951`). diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py index 9c1d8c5b4a..526c018907 100644 --- a/tests/migrations/test_autodetector.py +++ b/tests/migrations/test_autodetector.py @@ -665,6 +665,31 @@ class AutodetectorTests(TestCase): changes = autodetector._detect_changes() self.assertEqual(changes, {}) + def test_deconstruct_type(self): + """ + #22951 -- Uninstanted classes with deconstruct are correctly returned + by deep_deconstruct during serialization. + """ + author = ModelState( + "testapp", + "Author", + [ + ("id", models.AutoField(primary_key=True)), + ("name", models.CharField( + max_length=200, + # IntegerField intentionally not instantiated. + default=models.IntegerField, + )) + ], + ) + # Make state + before = self.make_project_state([]) + after = self.make_project_state([author]) + autodetector = MigrationAutodetector(before, after) + changes = autodetector._detect_changes() + self.assertNumberMigrations(changes, 'testapp', 1) + self.assertOperationTypes(changes, 'testapp', 0, ["CreateModel"]) + def test_replace_string_with_foreignkey(self): """ Adding an FK in the same "spot" as a deleted CharField should work. (#22300). |
