У Django есть несколько проектов с открытым исходным кодом, которые решают одну из наиболее заметных недостающих функций фреймворка: модель " эволюция ». Ruby on Rails имеет встроенную поддержку для миграций, но мне любопытно, может ли кто-нибудь рекомендовать один из следующих проектов "эволюции" Django:
Как вы можете перенести модели Django, аналогичные миграции Ruby on Rails?
Ответы (4)
На юге больше всего пара. dmigrations - это слишком элементарно ИМО. django-evolution кричит, если вы когда-нибудь прикоснетесь к базе данных вне ее.
Юг - безусловно, самый сильный соперник. Благодаря замораживанию модели и автоматическим миграциям она прошла долгий путь.
South и django-evolution, безусловно, лучшие варианты. По моему опыту, замораживание модели и авто-хинтинг в South все еще довольно хрупкие (хинтинг django-evolution намного надежнее в крайних случаях), но развитие django-evolution, похоже, в основном застопорилось с прошлого лета. Если бы я начинал сейчас, я бы, наверное, выбрал Юг, в основном по этой причине.
Прочитав это, я перешел от «ничего не зная об эволюции модели данных» к «использованию юга для управления миграцией модели» менее чем за 1 час. Документация Юга великолепна, и я ознакомился с ней в рекордно короткие сроки. Не смотря на другие упомянутые инструменты, я полностью рекомендую его.
Обновление: с момента публикации этого ответа около месяца назад я просмотрел несколько моделей данных, от простого переименования полей до полной замены некоторых таблиц новыми. South не может делать все полностью автоматически (например, переименование выглядит как удаление и добавление), но документация легко проведет вас через ручные шаги.
Я внесу юг в любой будущий проект. Фантастический инструмент!
Я являюсь членом команды, которая разработала миграцию, но я искренне рекомендую Юг. Он намного более зрелый, находится в активной разработке и имеет некоторые убийственные функции, такие как замораживание ORM (если вы попытаетесь использовать код ORM в миграции, а затем измените свои модели, вас ждет мир боли).