Как добавить поле в существующую модель django?

Недавно начал изучать Django. Исиользую последнюю на данный момент версию 2.1.1 Создал несколько моделей выполнил миграцию. Все нормально работало. Потом появилось необходимость добавить в существующую модель новые поля. И при попытки миграции появилось куча ошибок. Причем при первоначальном создании моделей я просто нажимал сохранения файла, при запущенном сервере и все поля добавлялись на лету. Попробовал способ заного создать бд, удалить папку с миграцией, создать супер пользователя. Это получилось и все заработало с новыми полями. Базу данный понятно пришлось заполнять званого. А теперь вопрос. Мне опять нужно добавить новое поле в модель без боли. Поискал в интернете, нашёл Django South – не понял что это, и актуально ли это. Есть какие-либо решения по этому поводу?
  • Вопрос задан
  • 2298 просмотров
Пригласить эксперта
Ответы на вопрос 1
JawsIk
@JawsIk
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)
Согласен с Павлом. А если по пунктам, то обычно новые поля добавляются с пол пинка. Это вот изменения названий моделей, там могут быть засады и нужно поплясать с бубном (я открывал базу и изменял названия таблиц)(да и то я думаю, что это особенности sqlite и с каким-нибудь MySql а тем паче PostgreSQL вообще всё прошло бы гладко), но в вашем случае нужно действительно смотреть на ошибки.
С чем например сталкивался я.
  1. Например если поле обязательное, то (когда уже существуют записи) может заругаться, что необходимо какое-то значение. И тут можно прописать параметр default в новом поле.
  2. Ещё я как-то сталкивался с засадой, когда добавил модель единиц измерений и в другую существующую модель добавил зависимость (units = models.ForeignKey(Units, on_delete=models.PROTECT)) и вот тут кажется при makemigrations оно меня тоже что-то там спрашивало, но поглядев яндекс-гугл, я ввёл значение (оно требовало что-нибудь ввести) и всё получилось.


Поэтому да, нужно смотреть в каждом конкретном случае. Главное не боятся. Кстати!!! Я ещё делаю вот такой финт ушами, как снимание дампа базы и потом его обратное заполнение. Это я делал для двух вещей. Во-первых для того, чтобы перейти с sqlite на PostgreSQL и не заполнять базу снова и для того, чтобы можно было через Bitbucket (или GitHub) переносить проект и базу в том числе.

Сливаем базу так (в терминале):
python manage.py dumpdata --indent=2 --exclude=contenttypes > datadump.json

Потом меняем подключение (или переносим например на другой комп или делаем после создания новой базы)(пишем поочерёдно 3 команды):
python manage.py makemigrations
python manage.py migrate --run-syncdb
python manage.py loaddata datadump.json
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы