Найти - Пользователи
Полная версия: изменить model
Начало » Django » изменить model
1
ser
Собственно, можно ли добавить в модель новое поле так, чтобы сохранить имеющиеся данные?
Maximbo
ser
Собственно, можно ли добавить в модель новое поле так, чтобы сохранить имеющиеся данные?
Штатного средства апгрейда БД нет (?), приходится ручками проделать следующее:
* Добавить в модель новое поле
* В консоли (unix) выполнить: python manage.py sql <app_name>
* Посмотреть вывод и в соответствии с ним через ALTER TABLE изменить схему БД
ser
Получил такой вывод:

BEGIN;
CREATE TABLE `todo_item` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(250) NOT NULL,
`created_date` datetime NOT NULL,
`priority` integer NOT NULL,
`days` integer NOT NULL,
`completed` bool NOT NULL,
`todo_list_id` integer NOT NULL
);
CREATE TABLE `todo_list` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(250) NOT NULL UNIQUE
);
ALTER TABLE `todo_item` ADD CONSTRAINT todo_list_id_refs_id_3d2c53d6 FOREIGN KEY
(`todo_list_id`) REFERENCES `todo_list` (`id`);
COMMIT;

Сделал SQL-запрос к бд ALTER TABLE…. Но ничего не меняется. Что не так?
Maximbo
ser
Сделал SQL-запрос к бд ALTER TABLE…. Но ничего не меняется. Что не так?
Я не совсем это имел ввиду.
Предположим, в модель Item добавилось поле completed.
Наши действия:
* Смотрим на вывод manage.py sql todo и видим как Django нарисовал нам описание таблицы todo_item;
* Делаем к БД запрос вида ALTER TABLE `todo_item` ADD `completed` bool NOT NULL;
* Далее каким-нибудь хитрым запросом устанавливаем значение по-умолчанию для новоиспечённого поля;

Всё сказанное относится к MySQL. Как поступать с другими СУБД я не в курсе.
ser
Ясно. Спасибо.
Александр Кошелев
Вот есть небольшая утилитка для автоматизации процесса миграции моделей.
http://code.google.com/p/django-schemaevolution/
поддерживает пока только MySQL базы. Фидбек из велкам.
Александр Кошелев
lorien
Прописывание в options.py # -*- coding: utf-8 устранило ворнинг
спасибо, исправим. у тебя наверно python2.5 ?
lorien
Попробовал добавить поле с помощью schema_evolution. Отработало нормально )
Отлично!:)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB