На юге существует два вида миграции: миграция схемы и миграция данных.
После создания схемы миграции создайте соответствующую миграцию данных:
./manage.py datamigration <app> <migration_name>
Не запускать миграцию (пока). Вместо этого откройте файл миграции, который вы только что создали.
Вы найдете метод с именем forwards()
. Для этого вы определяете процедуру копирования значений из старых таблиц в новые таблицы.
Если вы изменяете структуру данной таблицы на более сложную компоновку, общий метод состоит в том, чтобы две миграции схемы включали перенос данных: первая миграция схемы добавляет поля, перенос данных переводит старые поля в новые поля, а вторая схема миграции удаляет старые поля. С помощью базы данных forwards()
вы можете делать практически все, что угодно, при условии, что вы отслеживаете, к какой схеме (предыдущей или текущей) вы обращаетесь. Как правило, вы читаете только с orm.
-связи и пишете на традиционные средства доступа Django.
Обучающее руководство по South Data Migration раскрывает некоторые детали В нем показано, как использовать ссылку orm
Юга для доступа к базе данных с использованием схемы до переноса схемы, и дает доступ к базе данных без жалоб Django на поля, которые он не понимает.
Если вы переименовываете класс, это может быть сложно - это включает в себя создание новой таблицы, миграцию из одной в другую и удаление старой таблицы. Юг может сделать это, но может потребоваться более одного прохода для смены схем и миграции данных.
South также имеет метод backwards()
, который позволяет вам вернуть таблицы базы данных на предыдущий шаг. В некоторых случаях это может быть невозможно; новая таблица может записывать информацию, которая будет потеряна при понижении рейтинга. Я рекомендую использовать исключение в backwards()
, если вы не в режиме отладки.