Questo può essere fatto abbastanza facilmente usando migrations.SeparateDatabaseAndState
. Fondamentalmente, utilizziamo un'operazione di database per rinominare la tabella contemporaneamente a due operazioni di stato per rimuovere il modello dalla cronologia di un'app e crearlo in un'altra.
Rimuovi dalla vecchia app
python manage.py makemigrations old_app --empty
Nella migrazione:
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)
]
Aggiungi a nuova app
Innanzitutto, copia il modello nel model.py della nuova app, quindi:
python manage.py makemigrations new_app
Questo genererà una migrazione con un CreateModel
ingenuo operazione come unica operazione. Avvolgilo in un SeparateDatabaseAndState
operazione tale da non tentare di ricreare la tabella. Includi anche la migrazione precedente come dipendenza:
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)
]