Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como mover um modelo entre dois aplicativos Django (Django 1.7)


Isso pode ser feito facilmente usando migrations.SeparateDatabaseAndState . Basicamente, usamos uma operação de banco de dados para renomear a tabela simultaneamente com duas operações de estado para remover o modelo do histórico de um aplicativo e criá-lo no de outro.

Remover do aplicativo antigo

python manage.py makemigrations old_app --empty

Na migração:
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)
    ]

Adicionar ao novo aplicativo


Primeiro, copie o modelo para o model.py do novo aplicativo e, em seguida:
python manage.py makemigrations new_app

Isso gerará uma migração com um CreateModel ingênuo operação como a única operação. Envolva isso em um SeparateDatabaseAndState operação de tal forma que não tentemos recriar a tabela. Inclua também a migração anterior como uma dependência:
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)
    ]