Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment déplacer un modèle entre deux applications Django (Django 1.7)

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)
    ]