Điều này có thể được thực hiện khá dễ dàng bằng cách sử dụng migrations.SeparateDatabaseAndState
. Về cơ bản, chúng tôi sử dụng một thao tác cơ sở dữ liệu để đổi tên bảng đồng thời với hai thao tác trạng thái để xóa mô hình khỏi lịch sử của một ứng dụng và tạo nó trong một ứng dụng khác.
Xóa khỏi ứng dụng cũ
python manage.py makemigrations old_app --empty
Trong quá trình di chuyể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)
]
Thêm vào ứng dụng mới
Đầu tiên, sao chép mô hình vào model.py của ứng dụng mới, sau đó:
python manage.py makemigrations new_app
Điều này sẽ tạo ra một sự di chuyển với một CreateModel
ngây thơ hoạt động như hoạt động duy nhất. Kết thúc điều đó trong một SeparateDatabaseAndState
hoạt động như vậy mà chúng tôi không cố gắng tạo lại bảng. Cũng bao gồm việc di chuyển trước như một phần phụ thuộc:
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)
]