Това може да се направи сравнително лесно с помощта на migrations.SeparateDatabaseAndState
. По принцип използваме операция на база данни, за да преименуваме таблицата едновременно с две операции за състояние, за да премахнем модела от историята на едно приложение и да го създадем в друго.
Премахване от старото приложение
python manage.py makemigrations old_app --empty
В миграцията:
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)
]
Добавяне към ново приложение
Първо копирайте модела в model.py на новото приложение, след това:
python manage.py makemigrations new_app
Това ще генерира миграция с наивен CreateModel
операция като единствена операция. Увийте това в SeparateDatabaseAndState
операция, така че да не се опитваме да пресъздадем таблицата. Включете също предишната миграция като зависимост:
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)
]