Последовательная работа с миграцией
Иногда Вы можете обнаружить, что изменения в модели требуют некоторых улучшений. Предположим, Вы определили модель:
class Group(models.Model):
name = models.TextField(verbose_name="Name")
facebook_page__id = models.CharField(max_length=255)
и вы создали и применили миграцию:
./manage.py schemamigration southtut --auto
./manage.py migrate southtut
После чего Вы обнаружили, что: name на самом деле должно быть CharField, а не TextField, а facebook_page__id содержит двойное подчёркивание, а не одинарное, как Вы хотели. Тогда можно исправить эти проблемы и выполнить:
./manage.py schemamigration southtut --auto --update
+ Added model southtut.Group
Migration to be updated, 0026_auto__add_group, is already applied, rolling it back now...
previous_migration: 0025_auto__foo (applied: 2012-05-25 21:20:47)
Running migrations for southtut:
- Migrating backwards to just after 0025_auto__foo.
< partner:0026_auto__add_group
Updated 0026_auto__add_group.py. You can now apply this migration with: ./manage.py migrate southtut
Что произошло? South удалил последнюю миграцию, которая создала модель, но в которой были ошибки, и заменил её новой миграцией, которая уже не содержит этих ошибок.
Стоит так же обратить внимание на то, что та миграция, которая была уже применена, была автоматически откачена назад. Вы можете теперь применить последнюю версию миграции чтобы получить правильный вариант модели:
./manage.py migrate southtut
Можно повторять этот процесс так часто, как требуется, внося необходимые изменения и в итоге получить лишь одну миграцию, где будут учтены все ваши пожелания.
Просмотр текущих миграций
Часто бывает полезно посмотреть, какие миграции были применены на данный момент и какие доступны для использования. Для этой причины есть команда ./manage.py migrate —list. Вот результат выполнения этой команды для нашего проекта:
$ ./manage.py migrate --list
southtut
(*) 0001_initial
(*) 0002_auto__add_field_knight_dances_whenever_able
(*) 0003_auto__add_field_knight_shrubberies
(*) 0004_auto__add_unique_knight_name
Наличие звёздочки (*) говорит о том, что миграция была применена, а отсутствие — что ещё нет. Соответственно, чтобы увидеть только те миграции, которые были применены, воспользуйтесь командой ./manage.py migrate —list | grep -v «*»
Если у Вас есть несколько приложений, работающих при помощи миграций, то можно задать и имя приложения для просмотра миграций только для него.
Перенос данных
До сих пор мы говорили только о «миграции схемы», то есть об изменении колонок и индексов. Но есть и другой тип миграции — «миграция данных».
Миграция данных используется для изменения данных, сохранённых в вашей БД для приведения их в соответствие с новой схемой или предоставления новых возможностей. Например, если Вы сохраняете пароль в виде обычного текста (если это и правда так, то немедленно исправьте это. НЕМЕДЛЕННО!!!) и теперь хотите хранить его в виде солёного хеша, то Вам могут потребоваться эти три шага (причём каждый шаг — это одна миграция):
- Создаём две новые колонки: password_salt и password_hash (миграция схемы)
- Используя содержимое колонки password вычисляем соль и хеш для каждого пользователя (миграция данных)
- Удаляем старую колонку password (миграция схемы)
Как провести первую и последнюю миграцию Вы уже и сами знаете: изменяете models.py и запускаете ./manage.py schemamigration —auto myapp. Главное не удаляйте сразу колонку password, так как нам понадобятся данные из неё для заполнения двух новых колонок (всегда, всегда делайте бакуп вашей БД перед тем, как сделать любое изменение, которое может попортить данные. Потому что однажды именно так и будет).
Давайте возьмём реальный пример. Создадим новое приложение под именем southtut2. Добавим его в INSTALLED_APS и создадим его модель:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=255)
password = models.CharField(max_length=60)
name = models.TextField()
Сде

Как покрасить платье
Старое платье можно сделать модным и стильным, обновив его столь оригинальным способом. Красить платье мы будем не целиком, а частично, и в технике, похожей на узелковый батик. Только никаких узлов вязать мы не будем. Зато абстрактный рисунок станет настоящей изюминкой не только самого платья, но и всего образа. Смотрите сами!
Черничное мороженное с йогуртом

Черничное мороженное содержит большое количество черники, а черника содержит антоцианы — противораковые антиоксиданты. Это вкусное лакомство не только доставит истинное удовольствие, но еще и принесет пользу здоровью.
Для приготовления черничного мороженного понадобится полтора стакана свежей черники, стакан обезжиренного йогурта и сока черники, две столовые ложки меда и свежего лимонного сока.
Приготовить очень просто. Нужно поместить в блендер все ингредиенты и взбить до однородной массы. Полученную массу разлить по формам, добавив палочку. Также можно добавить ягоды черники для красоты. Замораживать в течении шести часов.
Такое мороженное содержит убойную дозу витамина С, калий, магний, хром и цинк. При этом черничная лакомка не грозит Вам ожирением. Калорийность одной порции составляет всего 38 ккал, 7 углеводов и практически не содержит жира.
Цитрусово-виноградный лед

Этот вкусный десерт популярен на улицах Нью-Йорка. В вечернее время его можно отведать в уютных местных кафе. Фруктовое лакомство не только освежит в жаркий день, но и улучшит деятельность пищеварительной системы.
Для приготовления цитрусово-виноградного льда потребуется два стакана холодной воды, половинка стакана сока лайма и столько же яблочного сока, четверть стакана темного меда, немного свежей мяты и очень много красного винограда без косточек. Виноград можно заменить изюмом.
Приготовить очень просто. В большую миску влить два стакана холодной воды, сок лайма и положить мед, все это дело смешать до однородной массы. В формы положить мяту и порезанного на кусочки винограда, залить ранее полученной смесью и добавить палочки. Замораживать в течение шести часов.
Такой фруктовый лед содержит уйму витамина С, магния и калия. При этом калорийность одной такой сладости не превышает 50 ккал, а содержание жиров равняется круглому нулю. Углеводов в одном мороженном 15 грамм, а белков – 1 грамм.
Клубнично-подсолнечный лед

Это клубничное мороженное не только выглядит красиво, но и очень вкусное. Сочетание клубники и семян подсолнечника придает великолепный вкус и при этом делает мороженное хорошим средством для укрепления иммунитета.
Для приготовления клубничного мороженного понадобится один банан, три стакана промытой клубники, три столовые ложки сахара, одна третья стакана очищенных семян подсолнечника, стакан клубничного и ананасового сока.
Семена подсолнечника необходимо обжарить в духовом шкафу в течение пары минут, духовку предварительно разогреть до 300 градусов. В кастрюлю вылить соки и положить клубнику и сахар, варить в течение пяти минут на медленном огне. Полученную остывшую смесь поместить в блендер, добавить очищенный банан и взбить до однородной массы. Залить полученную смесь в формочки, добавив палочки поместить в морозильную камеру на шесть часов.
Такое мороженное содержит витамин Е, цинк, железо, селен, калий, магний и медь. Калорийность одной порции всего 51 ккал, а жиров и углеводов 1,5 и 9 грамм соответственно. Это прекрасное диетическое лакомство.
Мексиканский шоколадный лед

Мексиканский лед не только вкусный, но и полезный. Корица и черный шоколад питает необходимыми микроэлементами сердце, а также стимулирует деятельность желудка.
Для приготовления мексиканского льда понадобится три стакана обезжиренного молока, 120 г молочного шоколада, 90 г темного шоколада, две с половиной чайной ложки корицы и красного молотого перца, две столовые ложки кукурузного крахмала; пару ложек ванильного сахара и щипотка соли.
Приготовить очень просто. В кастрюлю среднего размера положить корицу, крахмал, красный перец, соль и перемешать. Залить полученную смесь молоком, взбить и помешивая варить на среднем огне в течение десяти минут до загустения. Отдельно расплавить шоколад, добавить в него ваниль и дать остудиться в течение пяти минут. После перемешать расплавленный шоколад с полученной смесью и разлить по формам, добавив палочку. Поместить в морозильную камеру и оставить на шесть часов.
Шоколадный лед содержит железо, кальций, калий и магний. При этом его калорийность составляет всего 90 калорий, 8 граммов углеводов, 3 грамма белка и 4 жира, что очень мало для столь вкусного мороженного.
