Esto se puede hacer con bastante facilidad usando migrations.SeparateDatabaseAndState
. Básicamente, usamos una operación de base de datos para cambiar el nombre de la tabla al mismo tiempo que dos operaciones de estado para eliminar el modelo del historial de una aplicación y crearlo en el de otra.
Eliminar de la aplicación anterior
python manage.py makemigrations old_app --empty
En la migración:
class Migration(migrations.Migration):
dependencies = []
database_operations = [
migrations.AlterModelTable('TheModel', 'newapp_themodel')
]
state_operations = [
migrations.DeleteModel('TheModel')
]
operations = [
migrations.SeparateDatabaseAndState(
database_operations=database_operations,
state_operations=state_operations)
]
Añadir a nueva aplicación
Primero, copie el modelo en el archivo model.py de la nueva aplicación, luego:
python manage.py makemigrations new_app
Esto generará una migración con un ingenuo CreateModel
operación como única operación. Envuelva eso en un SeparateDatabaseAndState
operación tal que no intentemos recrear la tabla. Incluya también la migración anterior como dependencia:
class Migration(migrations.Migration):
dependencies = [
('old_app', 'above_migration')
]
state_operations = [
migrations.CreateModel(
name='TheModel',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
],
options={
'db_table': 'newapp_themodel',
},
bases=(models.Model,),
)
]
operations = [
migrations.SeparateDatabaseAndState(state_operations=state_operations)
]