Модели и миграции

Теперь настала пора сделать так, чтобы вместо примитивного текстового сообщения на страницу выводились полноценные сообщения, выгруженные из настоящей базы данных. Первый шаг – объявить модель.

Модель – специальный класс, описывающий конкретную таблицу в подключенной базе данных. В частности, необходимо описать доступный набор полей. При этом отдельный экземпляр класса — это отдельная запись таблицы (например, определенное сообщение блога, объявление и т.п.), что позволяет редактировать запись или выводить ее пользователю. При описании модели нет необходимости использовать привязку к определенной базе данных.

Для объявления модели используется файл models.py соответствующего пакета приложения. Первоначально данный модуль пуст.

Объявим модель Bb (объявления), указав следующие поля:

  • title – заголовок объявления. Поле обязательно к заполнению и имеет строковой тип (до 50 символов);
  • content – текст объявления (тип memo);
  • price – цена товара (вещественное число);
  • published – дата добавления объявления (временная метка, по умолчанию – текущая дата, индексированное поле);

Если запущен отладочный сервер, его необходимо остановить. Далее необходимо открыть файл models.py приложения bboard и добавить следующий код:

From django.db import models
Class Bd(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField(null=True, blank=True)
    price = models.FloatField(null=True, blank=True)
    published = models.DateTimeField(auto_now_add=True, db_index=True)

Объявленная модель должна представлять собой подкласс класса Model (модуль django.db.models). Конкретные поля модели объявляются как атрибуты класса, которым необходимо присвоить экземпляры классов (поля). Параметры полей необходимо указывать в конструкторах классов соответствующих полей при помощи именованных параметров.

В новой модели использовались следующие классы полей:

  • CharField – стандартное строковое поле, максимальная длина ограничена (параметр max_length);
  • TextField – текстовое поле без ограничения длины (memo-поле). Присвоение параметрам blank и null значения True укажет, что данное поле пользователь может не заполнять (по умолчанию все поля обязательны к заполнению);
  • DateTimeField – поле предназначено для хранения временной метки. Параметр auto_now_add позволяет указать, что при создании записи в данное поле необходимо занести текущее время и дату. Параметр db_index инициирует создание индекса для данного поля (объявления можно будет сортировать по дате).

Обычно таблицы баз банных имеют в составе специальное ключевое поле, необходимое для хранения уникальных значений для однозначной идентификации текущей записи (ключей). Как правило, поле имеет целочисленный тип и является автоинкрементным. В этом случае СУБД автоматически добавляет уникальный идентификатор в момент создания новой записи. При создании моделей в Django поле такого типа можно не объявлять – оно будет создано автоматически.

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

Стоит помнить, что по умолчанию параметры нового проекта в Django настроены на использование БД SQLite. База данных хранится в виде файла db.sqlite3 (находится в каталоге проекта), который создается автоматически при первом обращении.

Миграции

Миграция – программа, которая генерируется на основе созданных моделей и предназначена для внесения изменений в базу данных: таблицы, правила, индексы, поля, а также связи.

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

manage.py makemigrations bboard

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

Для хранения миграций используется пакет migrations, который находится в пакете текущего приложения. Файл первой миграции автоматически получает название 0001_initial.py.

В процессе выполнения миграции генерируются команды SQL, которые и обеспечивают создание нужной структуры БД. Посмотреть SQL-код можно при помощи команды в таком формате:

manage.py sqlmigrate bboard 0001

Для применения созданной миграции служит команда:

manage.py migrate

Данная команда выполняет все миграции (всех приложений), которые ранее не выполнялись. Стоит учитывать, что многие стандартные приложения, идущие в составе Django, используют базу данных для хранения своих данных. При этом для создания всех таблиц также используется готовый набор миграций.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: