Mysql
 sql >> Database >  >> RDS >> Mysql

Come spostare un modello tra due app Django (Django 1.7)

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