Dies kann ziemlich einfach mit migrations.SeparateDatabaseAndState
erfolgen . Grundsätzlich verwenden wir eine Datenbankoperation, um die Tabelle gleichzeitig mit zwei Zustandsoperationen umzubenennen, um das Modell aus dem Verlauf einer App zu entfernen und in dem einer anderen zu erstellen.
Aus alter App entfernen
python manage.py makemigrations old_app --empty
Bei der Migration:
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)
]
Zu neuer App hinzufügen
Kopieren Sie zuerst das Modell in die model.py-Datei der neuen App, dann:
python manage.py makemigrations new_app
Dadurch wird eine Migration mit einem naiven CreateModel
generiert Betrieb als alleiniger Betrieb. Wickeln Sie das in ein SeparateDatabaseAndState
ein Vorgang so, dass wir nicht versuchen, die Tabelle neu zu erstellen. Schließen Sie auch die vorherige Migration als Abhängigkeit ein:
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)
]