From 015496539247b24c73b163f279ae8c8d3ccefc4c Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Mon, 14 Jul 2014 08:16:35 -0400 Subject: [PATCH] Fixed #23013 -- Fixed removing unique_together/index_together constraints in migrations. Thanks melinath for the report. --- django/db/migrations/operations/models.py | 4 ++-- django/db/migrations/state.py | 2 -- tests/migrations/test_operations.py | 8 ++++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index 1c2f209df3b..1ded7c6db41 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -248,7 +248,7 @@ class AlterUniqueTogether(Operation): return name.lower() == self.name.lower() def describe(self): - return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.unique_together)) + return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.unique_together or '')) class AlterIndexTogether(Operation): @@ -288,7 +288,7 @@ class AlterIndexTogether(Operation): return name.lower() == self.name.lower() def describe(self): - return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.index_together)) + return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.index_together or '')) class AlterOrderWithRespectTo(Operation): diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index ab1c39f8eec..d24a37e5b90 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -272,8 +272,6 @@ class ModelState(object): # First, make a Meta object meta_contents = {'app_label': self.app_label, "apps": apps} meta_contents.update(self.options) - if "unique_together" in meta_contents: - meta_contents["unique_together"] = list(meta_contents["unique_together"]) meta = type(str("Meta"), tuple(), meta_contents) # Then, work out our bases try: diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index 5444dae97c2..b8d1ae58197 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -899,6 +899,10 @@ class OperationTests(OperationTestBase): operation.state_forwards("test_alunto", new_state) self.assertEqual(len(new_state.models["test_alunto", "pony"].options.get("unique_together", set())), 1) + def test_alter_unique_together_remove(self): + operation = migrations.AlterUniqueTogether("Pony", None) + self.assertEqual(operation.describe(), "Alter unique_together for Pony (0 constraint(s))") + def test_alter_index_together(self): """ Tests the AlterIndexTogether operation. @@ -922,6 +926,10 @@ class OperationTests(OperationTestBase): operation.database_backwards("test_alinto", editor, new_state, project_state) self.assertIndexNotExists("test_alinto_pony", ["pink", "weight"]) + def test_alter_index_together_remove(self): + operation = migrations.AlterIndexTogether("Pony", None) + self.assertEqual(operation.describe(), "Alter index_together for Pony (0 constraint(s))") + def test_alter_model_options(self): """ Tests the AlterModelOptions operation.