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

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

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

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

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

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

  • Удалите значения низкой частоты из pandas.dataframe
  • Перетаскивание в Tkinter?
  • Минималистичное отображение в реальном времени в Python
  • Модули IPython
  • Python: чтение всех строк текстового файла в цикле
  • Scikit-learn train_test_split с индексами
  • Эквивалент copyTo в Python OpenCV привязки?
  • Как подавить научную нотацию в Python?
  • 3 Solutions collect form web for “Django: изменение моделей без очистки всех данных?”

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

    См. Документы для syndb :

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

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

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

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

    Есть конечно.
    Отъезд Юг

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

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

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

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

    Python - лучший язык программирования в мире.