mirror of
https://github.com/django/django.git
synced 2025-10-26 15:16:09 +00:00
Implement allow_migrate for migration operations
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from django.db import router
|
||||
from .base import Operation
|
||||
|
||||
|
||||
@@ -17,11 +18,13 @@ class AddField(Operation):
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
to_model = to_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.add_field(from_model, to_model._meta.get_field_by_name(self.name)[0])
|
||||
if router.allow_migrate(schema_editor.connection.alias, to_model):
|
||||
schema_editor.add_field(from_model, to_model._meta.get_field_by_name(self.name)[0])
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.remove_field(from_model, from_model._meta.get_field_by_name(self.name)[0])
|
||||
if router.allow_migrate(schema_editor.connection.alias, from_model):
|
||||
schema_editor.remove_field(from_model, from_model._meta.get_field_by_name(self.name)[0])
|
||||
|
||||
def describe(self):
|
||||
return "Add field %s to %s" % (self.name, self.model_name)
|
||||
@@ -45,12 +48,14 @@ class RemoveField(Operation):
|
||||
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.remove_field(from_model, from_model._meta.get_field_by_name(self.name)[0])
|
||||
if router.allow_migrate(schema_editor.connection.alias, from_model):
|
||||
schema_editor.remove_field(from_model, from_model._meta.get_field_by_name(self.name)[0])
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
to_model = to_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.add_field(from_model, to_model._meta.get_field_by_name(self.name)[0])
|
||||
if router.allow_migrate(schema_editor.connection.alias, to_model):
|
||||
schema_editor.add_field(from_model, to_model._meta.get_field_by_name(self.name)[0])
|
||||
|
||||
def describe(self):
|
||||
return "Remove field %s from %s" % (self.name, self.model_name)
|
||||
@@ -74,11 +79,12 @@ class AlterField(Operation):
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
to_model = to_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.name)[0],
|
||||
to_model._meta.get_field_by_name(self.name)[0],
|
||||
)
|
||||
if router.allow_migrate(schema_editor.connection.alias, to_model):
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.name)[0],
|
||||
to_model._meta.get_field_by_name(self.name)[0],
|
||||
)
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
self.database_forwards(app_label, schema_editor, from_state, to_state)
|
||||
@@ -105,20 +111,22 @@ class RenameField(Operation):
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
to_model = to_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.old_name)[0],
|
||||
to_model._meta.get_field_by_name(self.new_name)[0],
|
||||
)
|
||||
if router.allow_migrate(schema_editor.connection.alias, to_model):
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.old_name)[0],
|
||||
to_model._meta.get_field_by_name(self.new_name)[0],
|
||||
)
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
from_model = from_state.render().get_model(app_label, self.model_name)
|
||||
to_model = to_state.render().get_model(app_label, self.model_name)
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.new_name)[0],
|
||||
to_model._meta.get_field_by_name(self.old_name)[0],
|
||||
)
|
||||
if router.allow_migrate(schema_editor.connection.alias, to_model):
|
||||
schema_editor.alter_field(
|
||||
from_model,
|
||||
from_model._meta.get_field_by_name(self.new_name)[0],
|
||||
to_model._meta.get_field_by_name(self.old_name)[0],
|
||||
)
|
||||
|
||||
def describe(self):
|
||||
return "Rename field %s on %s to %s" % (self.old_name, self.model_name, self.new_name)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from .base import Operation
|
||||
from django.db import models
|
||||
from django.db import models, router
|
||||
from django.db.migrations.state import ModelState
|
||||
|
||||
|
||||
@@ -17,13 +17,17 @@ class CreateModel(Operation):
|
||||
def state_forwards(self, app_label, state):
|
||||
state.models[app_label, self.name.lower()] = ModelState(app_label, self.name, self.fields, self.options, self.bases)
|
||||
|
||||
def database_forwards(self, app, schema_editor, from_state, to_state):
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
app_cache = to_state.render()
|
||||
schema_editor.create_model(app_cache.get_model(app, self.name))
|
||||
model = app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, model):
|
||||
schema_editor.create_model(model)
|
||||
|
||||
def database_backwards(self, app, schema_editor, from_state, to_state):
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
app_cache = from_state.render()
|
||||
schema_editor.delete_model(app_cache.get_model(app, self.name))
|
||||
model = app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, model):
|
||||
schema_editor.delete_model(model)
|
||||
|
||||
def describe(self):
|
||||
return "Create model %s" % (self.name, )
|
||||
@@ -42,11 +46,15 @@ class DeleteModel(Operation):
|
||||
|
||||
def database_forwards(self, app_label, schema_editor, from_state, to_state):
|
||||
app_cache = from_state.render()
|
||||
schema_editor.delete_model(app_cache.get_model(app_label, self.name))
|
||||
model = app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, model):
|
||||
schema_editor.delete_model(model)
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
app_cache = to_state.render()
|
||||
schema_editor.create_model(app_cache.get_model(app_label, self.name))
|
||||
model = app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, model):
|
||||
schema_editor.create_model(model)
|
||||
|
||||
def describe(self):
|
||||
return "Delete model %s" % (self.name, )
|
||||
@@ -67,11 +75,14 @@ class AlterModelTable(Operation):
|
||||
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_db_table(
|
||||
new_app_cache.get_model(app_label, self.name),
|
||||
old_app_cache.get_model(app_label, self.name)._meta.db_table,
|
||||
new_app_cache.get_model(app_label, self.name)._meta.db_table,
|
||||
)
|
||||
old_model = old_app_cache.get_model(app_label, self.name)
|
||||
new_model = new_app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, new_model):
|
||||
schema_editor.alter_db_table(
|
||||
new_model,
|
||||
old_model._meta.db_table,
|
||||
new_model._meta.db_table,
|
||||
)
|
||||
|
||||
def database_backwards(self, app_label, schema_editor, from_state, to_state):
|
||||
return self.database_forwards(app_label, schema_editor, from_state, to_state)
|
||||
@@ -97,11 +108,14 @@ class AlterUniqueTogether(Operation):
|
||||
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_unique_together(
|
||||
new_app_cache.get_model(app_label, self.name),
|
||||
getattr(old_app_cache.get_model(app_label, self.name)._meta, "unique_together", set()),
|
||||
getattr(new_app_cache.get_model(app_label, self.name)._meta, "unique_together", set()),
|
||||
)
|
||||
old_model = old_app_cache.get_model(app_label, self.name)
|
||||
new_model = new_app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, new_model):
|
||||
schema_editor.alter_unique_together(
|
||||
new_model,
|
||||
getattr(old_model._meta, "unique_together", set()),
|
||||
getattr(new_model._meta, "unique_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)
|
||||
@@ -127,11 +141,14 @@ class AlterIndexTogether(Operation):
|
||||
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()),
|
||||
)
|
||||
old_model = old_app_cache.get_model(app_label, self.name)
|
||||
new_model = new_app_cache.get_model(app_label, self.name)
|
||||
if router.allow_migrate(schema_editor.connection.alias, new_model):
|
||||
schema_editor.alter_index_together(
|
||||
new_model,
|
||||
getattr(old_model._meta, "index_together", set()),
|
||||
getattr(new_model._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)
|
||||
|
||||
Reference in New Issue
Block a user