Подтвердить что ты не робот

Django: изменение моделей без очистки всех данных?

У меня есть некоторые модели, с которыми я работаю в новой установке Django. Возможно ли изменить поля без потери данных приложения?

Я попытался изменить поле и запустить python manage.py syncdb. Результатом этой команды не было.

Обновление страницы администратора для редактирования измененных моделей вызвало TemplateSyntaxErrors, поскольку Django искал отображение полей, которые не существовали в db.

Я использую SQLite.

Я могу удалить файл db, а затем повторно запустить python manage.py syncdb, но это своего рода боль. Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Django никогда не изменяет существующий столбец базы данных. Syncdb будет создавать таблицы, но он не выполняет "миграции", как это было в Rails. Если вам нужно что-то подобное, посмотрите Django South.

Смотрите документы для syndb:

Syncdb не будет изменять существующие таблицы

syncdb будет создавать таблицы только для моделей, которые еще не установлены. Он никогда не выдает утверждения ALTER TABLE, чтобы соответствовать изменениям, внесенным в класс модели после установки. Изменения в классах моделей и схемах базы данных часто связаны с некоторой формой двусмысленности, и в этих случаях Django должен был догадываться о правильных изменениях. Существует риск того, что критические данные будут потеряны в процессе.

Если вы внесли изменения в модель и хотите изменить таблицы базы данных для соответствия, используйте команду sql для отображения новой структуры SQL и сравните ее с существующей схемой таблицы, чтобы выработать изменения.

Вы должны вручную изменить имена столбцов в своей базе данных с помощью любых инструментов администрирования, предоставляемых sqlite. Я сделал это с MySQL, например, и поскольку MySQL позволяет изменять имена столбцов, не затрагивая ваши данные, это не проблема.

Ответ 2

Конечно, есть. Проверьте South

Ответ 3

Вам придется вручную обновлять схему/макет базы данных, если вы говорите только о добавлении/удалении столбцов.

Если вы пытаетесь переименовать столбец, вам придется найти другой способ.

Вы можете использовать команду python manage.py sql [app name] (http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname), чтобы увидеть, как выглядит новый SQL, чтобы увидеть, какие столбцы, какого типа/спецификации Django вы бы добавили, а затем вручную выполните соответствующие команды ALTER TABLE.

Есть несколько приложений/проектов, которые упрощают управление моделью/БД, но Django не поддерживает это из коробки, специально или по дизайну.