South. Добавление поля в модель

Воскресенье, 15 Дек. 2013 by Kirill Shershen


Как модель не планируй в начале, а всё равно придется её изменять. Стандартный manage.py sync.db очень запутанный и не гибкий. Чтобы, например, добавить поле нужно выполнить следующие действия:

  1. Добавить вручную поле в базу данных(ALTER TABLE ...).
  2. Добавить новое поле в модель.
  3. Убедиться что всё работает(можно через manage.py shell).
  4. На продакш-сервере добавить вручную поле в базу данных(ALTER TABLE ...).
  5. Обновить модель из репозитория(svn|git|hg update) или вручную.
  6. Перезапустить сервер.

Для того чтобы упростить эту схему была придумана утилита south. Устанавливается через pip install django-south. И нужно добавить это приложение в settings.py

INSTALLED_APPS = (
    ...,

    'south',

)

и запустить manage.py syncdb один раз, далее все изменения будут накатываться командой manage.py migrate <app>

Теперь чтобы добавить поле в модель нужно следующее:

  1. Добавляем поле в модель
  2. Выполняем manage.py schemamigration <app> --auto(создаётся схема миграции)
  3. Выполняем manage.py migrate <app>
  4. Убедиться что всё работает(можно через manage.py shell).
  5. Обновить модель из репозитория(svn|git|hg update) или вручную.
  6. Выполняем manage.py migrate <app>.
  7. Перезапускаем сервер.

Этапов может и больше получилось, но всё равно так проще. Не надо думать чем залазить в БД и как писать команду и т.д. Это хорошо видно когда нужно будет изменить несколько полей в нескольких моделях. 

О south хорошо описано здесь http://python-lab.blogspot.ru/search/label/south

P.S. Для первоначального добавления модели в базу нужно создать схему миграции, командой: python manage.py schemamigration app --initial и после python manage.py migrate app

Теги: django , south


blog comments powered by Disqus