К этому моменту мы уже разобрались, что такое приложение в Django, научились его создавать, регистрировать в проекте и маршрутизировать запросы. Теперь пришло время сделать наше приложение по-настоящему функциональным, добавляя туда модели данных и связывая их с базой данных. Сегодня мы узнаем, как в Django определяются модели, как они обрабатываются с помощью ORM и что такое миграции.
Цели лекции
- Научиться создавать Django-модели.
- Понять, как модели связаны с базой данных через ORM.
- Изучить процесс миграций — как они помогают сохранять и вносить изменения в структуру базы данных.
- Сделать практический пример: создадим модель "Автор" для нашего блога.
Понятие модели в Django: что это вообще такое?
Давайте разберемся, что такое модель в Django. Представьте себе типичное приложение — блог. В нем есть статьи, авторы, комментарии, категории. Каждая такая сущность — это, по сути, набор данных с определенной структурой. Например, у статьи может быть название, текст, дата публикации, автор. В Django такие сущности описываются с помощью моделей.
Модель в Django — это Python-класс, который наследуется от django.db.models.Model. Каждое свойство (атрибут) класса представляет собой столбец в таблице базы данных, а объект модели — это строка (запись) в этой таблице.
Пример: если бы таблица в базе данных была домиком, то модель в Django — это чертеж этого домика. ORM (Object-Relational Mapping) берет этот чертеж и создает реальный домик — таблицу в базе.
Как создать модель в Django
Чтобы создать модель, выполните следующие шаги:
- Откройте файл
models.pyвашего приложения. В нашем случае этоblog/models.py. - Определите Python-класс, который будет наследоваться от
django.db.models.Model. - Добавьте свойства класса, представляющие поля модели.
Давайте создадим простую модель для описания автора блога. Каждый автор будет иметь имя, фамилию, email и его дату регистрации.
from django.db import models
class Author(models.Model):
# Поле для имени автора
first_name = models.CharField(max_length=50)
# Поле для фамилии автора
last_name = models.CharField(max_length=50)
# Поле для email
email = models.EmailField(unique=True)
# Поле для даты регистрации
date_registered = models.DateTimeField(auto_now_add=True)
def __str__(self):
# Этот метод используется для представления объекта в строковом формате
return f"{self.first_name} {self.last_name}"
Разберем структуру кода
models.CharField(max_length=50): Поле для хранения текстовых данных. Аргументmax_lengthуказывает максимальную длину строки.models.EmailField(unique=True): Это специальное поле для хранения email-адресов. Аргументunique=Trueозначает, что email должен быть уникальным.models.DateTimeField(auto_now_add=True): Поле для хранения даты и времени.auto_now_add=Trueавтоматически заполняет поле текущей датой и временем при создании объекта.- Метод
__str__: Возвращает строковое представление объекта модели. Это помогает, например, в админ-панели Django, чтобы объекты отображались в удобном виде.
Что такое миграции и зачем они нужны?
Миграции — это способ управлять изменениями в структуре базы данных через код. Когда вы создаете или редактируете модель, Django автоматически генерирует файлы миграций, которые описывают изменения: добавление таблицы, изменение полей и т.п.
Как связаны миграции и базы данных?
- Модель: это Python-код, который вы пишете.
- Миграция: это промежуточный файл, который генерирует Django, чтобы преобразовать модель в инструкции для базы данных.
- База данных: после выполнения миграции изменения сохраняются в самой базе.
Основные команды для работы с миграциями
- Генерация миграций После создания или изменения модели в
models.py, нужно сгенерировать файл миграции с помощью команды:
python manage.py makemigrations
Django создаст файл миграции, в котором будет описано, какую таблицу нужно добавить в базу данных. Например:
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Author
- Применение миграций
Чтобы изменения вступили в силу и таблицы действительно появились в базе данных, нужно выполнить команду:
python manage.py migrate
Эта команда применяет все созданные миграции к базе данных.
Практика: создаем модель и выполняем миграции
Пора поработать руками и добавить модель "Автор" в наше приложение!
Шаг 1: Определяем модель в models.py Мы уже это сделали. Наш код для модели "Автор" готов.
Шаг 2: Генерируем файл миграции
Откройте терминал, перейдите в папку проекта и выполните команду:
python manage.py makemigrations
Вы увидите примерно следующее:
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Author
Шаг 3: Применяем миграцию
Теперь создадим таблицу в базе данных. Выполните команду:
python manage.py migrate
Если всё прошло успешно, Django настроит базу данных и создаст таблицу для модели "Автор". Лёгким движением кода мы добавили новую сущность в базу! Магия.
Что делать, если модель нужно изменить?
Иногда вам потребуется изменить модель — например, добавить новое поле или изменить тип данных. Вот как это сделать:
- Внесите изменения в
models.py. - Снова выполните команду
python manage.py makemigrations. - Примените миграции командой
python manage.py migrate.
Пример: добавим поле "биография" для автора.
Внесите изменения в модель:
class Author(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
date_registered = models.DateTimeField(auto_now_add=True)
bio = models.TextField(blank=True, null=True) # Поле для биографии
def __str__(self):
return f"{self.first_name} {self.last_name}"
Сгенерируйте и выполните миграции:
python manage.py makemigrations
python manage.py migrate
Теперь модель "Автор" обновлена, а база данных знает о новом поле.
Возможные ошибки и их решение
Иногда процесс создания модели и миграций может вызвать ошибки. Вот несколько типичных ситуаций:
- Ошибка
Table already exists: это происходит, если таблица уже существует в базе данных. Убедитесь, что вы не дублируете существующие модели. - Ошибка
Field requires a default value: если вы добавляете новое поле в модель, Django может попросить указать значение по умолчанию. Вы можете использоватьdefaultили добавитьnull=True. - Забыли сделать миграции: иногда легко забыть про команду
makemigrations. Если изменения в модели не применились, проверьте, создавали ли вы для них миграцию.
Практическое задание
- В вашем проекте создайте модель "Категория" для блога. У каждой категории должно быть название и описание.
- Сгенерируйте и примените миграцию для модели "Категория".
- Убедитесь, что таблица создана в базе данных. Вы можете использовать Django Admin для проверки.
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.name
Теперь вы владеете основами создания моделей и магией миграций в Django. Это первый шаг к тому, чтобы ваши данные ожили в приложениях!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ