1
0
mirror of https://github.com/django/django.git synced 2025-10-27 07:36:08 +00:00

Persist non-schema-relevant Meta changes in migrations

This commit is contained in:
Andrew Godwin
2014-06-15 12:34:02 -07:00
parent f717ef083a
commit a58f49d104
5 changed files with 93 additions and 2 deletions

View File

@@ -1,11 +1,11 @@
from .models import (CreateModel, DeleteModel, AlterModelTable,
AlterUniqueTogether, AlterIndexTogether, RenameModel)
AlterUniqueTogether, AlterIndexTogether, RenameModel, AlterModelOptions)
from .fields import AddField, RemoveField, AlterField, RenameField
from .special import SeparateDatabaseAndState, RunSQL, RunPython
__all__ = [
'CreateModel', 'DeleteModel', 'AlterModelTable', 'AlterUniqueTogether',
'RenameModel', 'AlterIndexTogether',
'RenameModel', 'AlterIndexTogether', 'AlterModelOptions',
'AddField', 'RemoveField', 'AlterField', 'RenameField',
'SeparateDatabaseAndState', 'RunSQL', 'RunPython',
]

View File

@@ -283,3 +283,32 @@ class AlterIndexTogether(Operation):
def describe(self):
return "Alter index_together for %s (%s constraints)" % (self.name, len(self.index_together))
class AlterModelOptions(Operation):
"""
Sets new model options that don't directly affect the database schema
(like verbose_name, permissions, ordering). Python code in migrations
may still need them.
"""
def __init__(self, name, options):
self.name = name
self.options = options
def state_forwards(self, app_label, state):
model_state = state.models[app_label, self.name.lower()]
model_state.options = dict(model_state.options)
model_state.options.update(self.options)
def database_forwards(self, app_label, schema_editor, from_state, to_state):
pass
def database_backwards(self, app_label, schema_editor, from_state, to_state):
pass
def references_model(self, name, app_label=None):
return name.lower() == self.name.lower()
def describe(self):
return "Change Meta options on %s" % (self.name, )