Dit kan vrij eenvoudig worden gedaan met behulp van migrations.SeparateDatabaseAndState
. Kortom, we gebruiken een databasebewerking om de tabel gelijktijdig te hernoemen met twee statusbewerkingen om het model uit de geschiedenis van de ene app te verwijderen en in die van een andere te maken.
Verwijderen uit oude app
python manage.py makemigrations old_app --empty
In de migratie:
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)
]
Toevoegen aan nieuwe app
Kopieer eerst het model naar model.py van de nieuwe app en vervolgens:
python manage.py makemigrations new_app
Dit genereert een migratie met een naïeve CreateModel
operatie als enige operatie. Wikkel dat in een SeparateDatabaseAndState
bewerking zodanig dat we niet proberen de tabel opnieuw te maken. Neem ook de eerdere migratie op als afhankelijkheid:
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)
]