Здравствуйте, мои дорогие друзья.
Что-то я давно не писал, хотя с последнего раза много интересного произошло:- Вышел Django 1.0, и даже Django 1.0.1.
- На работе светлая сторона силы взяла свое и мы написали два проекта на Django для министерства образования. К тому же используя scrum, который сам по себе заслужил отдельного поста. На подходе еще один проект для РосБизнесТура.
Сегодня я расскажу о замечательной утилите для Django — deseb.
Deseb добавляет к manage.py всего одну команду evolvedb, эта команда позволяет сгенерировать новую схему базы данных из моделей не теряя данных уже находящихся в базе
Django изначально не умеет этого делать и единственным вариантом изменения схемы является команда resetdb, которая удаляет все таблицы приложения и создает их заново, что согласитесь не очень удобно.
Рассмотрим пример использования команды evolvedb. Для начала нужно установить deseb:
- Перейдем в директорию с проектом
coblog. - Получим исходные коды deseb
svn checkout http://deseb.googlecode.com/svn/trunk/src/deseb - И добавим
import desebв начало файлаsetting.py.
Для примера исправим одну из ошибок в нашем проекте, непозволяющую создавать комментарии без parent и еще пару мелочей. В файле default/models.py заменим
posted = models.DateTimeField()
в модели Post на
posted = models.DateTimeField(blank=True, null=True)
В модели Comment строчку
parent = models.ForeignKey('self')
на
parent = models.ForeignKey('self', null=True, blank=True)
И строчку
__rate = models.IntegerField()
в той же модели на
__rate = models.IntegerField(default=0)
Теперь для изменения базы данных и пригодится команда evolvedb. Запустим ее:
python manage.py evolvedb
ничего не происходит. Оказалось, что evolvedb не срабатывает на изменение параметров внешних ключей.
Придется немного доработать deseb для того чтобы он воспринимал эти изменения. В файле deseb/schema_evolution.py заменим строчку
if data_types.has_key(data_type):
на строчку
if not f.db_type() is None:
и чудесным образом evolvedb предложит внести изменения в базу.
Я не уверен, что внесенные изменения deseb оправданы и ничего не сломается при работе с другими БД, кто может что сказать по этому поводу?
Вот такой полезный иструмент deseb, надеюсь он будет вам полезен.
Беспрецедентная акция
Оставьте комментарий о теме которую вы бы хотели узнать в следующий раз. И я напишу о ней.
10 коммент.:
Спасибо большое за заметки, интересно и полезно читать, особенно мне, начинающему.
@Трам-пам-пам, спасибо за отзыв.
=) Спасибо за пост и за акцию.
Очень интересно прочитать, как идет процесс разработки, как деплоятся готовые проекты, как исправляются ошибки.
@bessarabov
Разработка идет очень весело, в команде иногда по скраму, не думаю, что здесь можно что-то добавить ;).
Могу рассказать про нашу хитрую систему деплоя она написана на sh скриптах и нарисовать как она завязана на процесс разработки и тестирования. Интересно?
Да, было бы здорово!
а у меня как одного из создателей спросить? :)
фикс полезный. обязательно добавлю в стабильную версию!
@buriy здорово, спасибо за замечательную утилиту.
Если изменение действительно полезно могу сегодня сформировать патч для транка, протестировать и прислать.
применил твоё изменение.
заодно добавил добавление и удаление индексов для постгреса.
Спасибо, как раз с базй мучался. Не хотелось данные терять.
А можно узнать как в админке создавать табличные формы для удобного ввода данных по ключу из связанной таблицы? Я имею ввиду что избыточная часть данных будет вводиться автоматически. Хотелось бы увидеть красивое решение по типу inlines
Заранее благодарен
Уже лучше использовать South http://south.aeracode.org/
Про вопрос с админкой не понял, можно подробнее?
Отправить комментарий