Cela peut être fait assez facilement en utilisant migrations.SeparateDatabaseAndState
. Fondamentalement, nous utilisons une opération de base de données pour renommer la table simultanément avec deux opérations d'état pour supprimer le modèle de l'historique d'une application et le créer dans une autre.
Supprimer de l'ancienne application
python manage.py makemigrations old_app --empty
Dans la 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)
]
Ajouter à une nouvelle application
Commencez par copier le modèle dans le fichier model.py de la nouvelle application, puis :
python manage.py makemigrations new_app
Cela générera une migration avec un naïf CreateModel
opération comme seule opération. Enveloppez cela dans un SeparateDatabaseAndState
opération telle que nous n'essayons pas de recréer la table. Incluez également la migration précédente en tant que dépendance :
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)
]