sql >> Base de Datos >  >> RDS >> Mysql

Cómo mover un modelo entre dos aplicaciones Django (Django 1.7)

Esto se puede hacer con bastante facilidad usando migrations.SeparateDatabaseAndState . Básicamente, usamos una operación de base de datos para cambiar el nombre de la tabla al mismo tiempo que dos operaciones de estado para eliminar el modelo del historial de una aplicación y crearlo en el de otra.

Eliminar de la aplicación anterior

python manage.py makemigrations old_app --empty

En la migración:

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

Añadir a nueva aplicación

Primero, copie el modelo en el archivo model.py de la nueva aplicación, luego:

python manage.py makemigrations new_app

Esto generará una migración con un ingenuo CreateModel operación como única operación. Envuelva eso en un SeparateDatabaseAndState operación tal que no intentemos recrear la tabla. Incluya también la migración anterior como dependencia:

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