Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verschieben Sie ein Modell zwischen zwei Django-Apps (Django 1.7)

Dies kann ziemlich einfach mit migrations.SeparateDatabaseAndState erfolgen . Grundsätzlich verwenden wir eine Datenbankoperation, um die Tabelle gleichzeitig mit zwei Zustandsoperationen umzubenennen, um das Modell aus dem Verlauf einer App zu entfernen und in dem einer anderen zu erstellen.

Aus alter App entfernen

python manage.py makemigrations old_app --empty

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

Zu neuer App hinzufügen

Kopieren Sie zuerst das Modell in die model.py-Datei der neuen App, dann:

python manage.py makemigrations new_app

Dadurch wird eine Migration mit einem naiven CreateModel generiert Betrieb als alleiniger Betrieb. Wickeln Sie das in ein SeparateDatabaseAndState ein Vorgang so, dass wir nicht versuchen, die Tabelle neu zu erstellen. Schließen Sie auch die vorherige Migration als Abhängigkeit ein:

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