1 / создайте новую модель, оставив исходную без изменений
2 / сделайте миграцию, чтобы создать модель, запустите ее, добавьте в свой контроль версий
3 / создайте пустуюмиграции для вашего приложения, и в этой миграции напишите код миграции данных
def forward(apps, schema_editor):
# VERY important: don't import the models,
# get them from `app.get_model()`
Fruit = apps.models.get("yourappname", "Fruit")
Fruittaste = apps.models.get("yourappname", "Fruittast")
data = [ Fruittaste(fruit=fruit,taste_description=fruit.tase_description,tasty=fruit.tasty) for fruit in Fruit.objects.all()
]
Fruittaste.objects.bulk_create(data)
class Migration(migrations.Migration):
dependencies = [
('yourappname', '000x_previous_migration'),
]
operations = [
migrations.RunPython(forward),
]
Примечание: в зависимости от размера набора данных вы также можете записывать новые записи в БД по одной вместособирать их в список и отправить целое в bulk_create. Это будет медленнее, но потребляет меньше памяти.
NB. По возможности следует добавлять обратную миграцию, но в приведенном выше случае вам придется произвольно выбирать один из множества возможных вкусов для каждого фрукта. итак ...
4 / и, наконец, удалите устаревшие поля из Fruit
, сделайте и запустите миграцию и т. д. (не забывайте добавлять файлы миграции в вашу версию cotrol !!!).