Как легко менять модель данных в Django

Как легко менять модель данных в Django

Часто, разрабатывая приложение не знаешь какие поля какого размера и SQL типа нужны. Я вот столкнулся с проблемой что UTF-8 съедает нереально больше места - так как многие символы понятное дело двухбайтовые. Еще я забыл добавить к blog характирестику: isPublished, потому все мои (даже недописанные) статьи появлялись сразу - без предупреждения. В общем пришло время менять схему.

Если в случае Blog я просто добавил определение поля в model, потом запустил ./manage.py sql blog, посмотрел на определение поля и потом добавил его вручную:

avk_pws=> alter table "blog_post"
avk_pws->  add column "isPublic" boolean NOT NULL default true;
ALTER TABLE

То в случае с изменением типа поля для фотки с varchar на Text похоже надо как то по другому (что то я не помню чтобы можно было на ходу менять тип поля, может я и ошибаюсь). В общем решил делать просто: добавил поля title\ru\tmp и title\en\tmp и потом, запустив ./manage.py shell перегнал данные:

.comment {
  color: gray;
}

.keyword {
  font-weight: bold;
}

.python .string {
  color: blue;
}

.html .atribute .value {
  color: green;
}
from PersonalWebSite.AVKGallery.models import Photo 
photos = Photo.objects.all() 
for photo in photos: 
    photo.title_ru_new = photo.title_ru
    photo.title_en_new = photo.title_en
    photo.save()

Дальше - проще. Удаляем старые поля с неправильным типом и переименовываем новые:

avk_pws=> alter table "AVKGallery_photo" rename  title_en_new to title_en;
ALTER TABLE
avk_pws=> alter table "AVKGallery_photo" rename  title_ru_new to title_ru;
ALTER TABLE
avk_pws=>

Вот и всё! Теперь я могу делать длинные надписи на фотках на русском языке.