Ini dapat dilakukan dengan cukup mudah menggunakan migrations.SeparateDatabaseAndState
. Pada dasarnya, kami menggunakan operasi database untuk mengganti nama tabel secara bersamaan dengan dua operasi status untuk menghapus model dari satu riwayat aplikasi dan membuatnya di riwayat lain.
Hapus dari aplikasi lama
python manage.py makemigrations old_app --empty
Dalam migrasi:
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)
]
Tambahkan ke aplikasi baru
Pertama, salin model ke model.py aplikasi baru, lalu:
python manage.py makemigrations new_app
Ini akan menghasilkan migrasi dengan CreateModel
naif operasi sebagai satu-satunya operasi. Bungkus itu dalam SeparateDatabaseAndState
operasi sedemikian rupa sehingga kami tidak mencoba membuat ulang tabel. Sertakan juga migrasi sebelumnya sebagai ketergantungan:
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)
]