diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2013-07-02 18:02:01 +0100 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2013-07-02 18:02:01 +0100 |
| commit | 61ff46cf8b483d857768832818693f6225b534ca (patch) | |
| tree | 87c5dcd50d48980412f70b5b5b796dbf98d921e1 /django | |
| parent | 2202e3f7d3b3855d59d87c3865982f43b9370ba1 (diff) | |
Add AlterIndexTogether operation
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/operations/__init__.py | 2 | ||||
| -rw-r--r-- | django/db/migrations/operations/models.py | 32 |
2 files changed, 32 insertions, 2 deletions
diff --git a/django/db/migrations/operations/__init__.py b/django/db/migrations/operations/__init__.py index afa5c85cdc..1240a5d1f5 100644 --- a/django/db/migrations/operations/__init__.py +++ b/django/db/migrations/operations/__init__.py @@ -1,2 +1,2 @@ -from .models import CreateModel, DeleteModel, AlterModelTable, AlterUniqueTogether +from .models import CreateModel, DeleteModel, AlterModelTable, AlterUniqueTogether, AlterIndexTogether from .fields import AddField, RemoveField, AlterField, RenameField diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index 7279a163f0..0c9e69e127 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -82,7 +82,7 @@ class AlterModelTable(Operation): class AlterUniqueTogether(Operation): """ - Changes the value of unique_together to the target one. + Changes the value of index_together to the target one. Input value of unique_together must be a set of tuples. """ @@ -108,3 +108,33 @@ class AlterUniqueTogether(Operation): def describe(self): return "Alter unique_together for %s (%s constraints)" % (self.name, len(self.unique_together)) + + +class AlterIndexTogether(Operation): + """ + Changes the value of index_together to the target one. + Input value of index_together must be a set of tuples. + """ + + def __init__(self, name, index_together): + self.name = name.lower() + self.index_together = set(tuple(cons) for cons in index_together) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name.lower()] + model_state.options["index_together"] = self.index_together + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + old_app_cache = from_state.render() + new_app_cache = to_state.render() + schema_editor.alter_index_together( + new_app_cache.get_model(app_label, self.name), + getattr(old_app_cache.get_model(app_label, self.name)._meta, "index_together", set()), + getattr(new_app_cache.get_model(app_label, self.name)._meta, "index_together", set()), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Alter index_together for %s (%s constraints)" % (self.name, len(self.index_together)) |
