Мы уже познакомились с архитектурой Django и разобрались, что такое представления и шаблоны. Теперь нырнём в модели. Это сердце вашего Django-приложения. Именно модели определяют, как данные будут храниться в базе данных.
Что такое модели Django?
В Django модель — это класс Python, который наследуется от django.db.models.Model. Каждая модель — это таблица в базе данных. А каждый атрибут (поле) модели — это столбец в этой таблице.
Django-модели используют мощный ORM (Object-Relational Mapper). Это значит, что вам не нужно писать SQL-запросы вручную. Вы работаете с обычными Python-объектами, а Django сам переводит ваши действия в SQL-запросы. Это упрощает разработку и делает код понятнее.
Давайте создадим простую модель Post для нашего блога:
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
author = models.CharField(max_length=100)
def __str__(self):
return self.title
Мы определили модель Post с четырьмя полями:
title: Заголовок поста. ТипCharField(строка с ограничением длины).content: Содержимое поста. ТипTextField(большой текстовый блок).published_date: Дата публикации. ТипDateTimeField.auto_now_add=Trueавтоматически ставит текущую дату и время при создании поста.author: Автор поста. ТипCharField.
Метод __str__(self) нужен, чтобы объекты модели удобно отображались, например, в админ-панели Django. Он возвращает строковое представление объекта.
Важно: Создали или изменили модели? Всегда запускайте миграции.
Что такое миграции базы данных?
Миграции в Django — это способ перенести изменения ваших моделей (и, соответственно, схемы базы данных) в саму базу данных. Когда вы создаёте новую модель или меняете существующую, Django генерирует файл миграции. Этот файл содержит инструкции, как изменить структуру базы данных, чтобы она соответствовала вашим моделям.
Процесс миграции состоит из двух шагов:
- Создание миграций (
makemigrations): Django анализирует изменения в моделях и генерирует Python-файлы с описанием этих изменений. - Применение миграций (
migrate): Django выполняет инструкции из файлов миграций, применяя их к базе данных.
Шаг 1: Создаём миграции
Откройте терминал в корневой директории вашего Django-проекта (там, где лежит manage.py). Выполните команду:
python manage.py makemigrations blog
Здесь blog — это название вашего приложения. Если не укажете имя, Django попробует создать миграции для всех приложений в проекте.
Вы увидите примерно такой вывод:
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Post
Это значит, что Django создал файл миграции 0001_initial.py в папке blog/migrations/. Он содержит инструкции для создания таблицы Post в базе данных.
Шаг 2: Применяем миграции
Теперь нужно применить созданный файл миграции к базе данных. Выполните команду:
python manage.py migrate
Django применит все неприменённые миграции. Вы увидите список применённых миграций, включая вашу новую миграцию для модели Post.
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, blog
Running migrations:
Applying blog.0001_initial... OK
Поздравляю! 🎉 Теперь в вашей базе данных есть таблица, которая соответствует вашей модели Post.
Совет: Всегда сначала запускайте
makemigrations, а потомmigrate. Если забудетеmakemigrations,migrateне увидит изменений.
Изменение моделей и повторные миграции
Что, если вы захотите добавить новое поле в модель Post? Например, поле для количества просмотров.
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
author = models.CharField(max_length=100)
views_count = models.IntegerField(default=0) # Новое поле
def __str__(self):
return self.title
После добавления поля views_count снова выполните те же две команды:
python manage.py makemigrations blogpython manage.py migrate
Django сгенерирует новый файл миграции (например, 0002_add_views_count_to_post.py). Он будет содержать инструкции по добавлению нового столбца views_count в существующую таблицу Post. Затем migrate применит эти изменения.
Практическое задание
- В вашем Django-проекте откройте файл
models.pyв одном из приложений (например,blog). - Создайте новую модель
Comment(Комментарий) с такими полями:text(текст комментария):TextFieldauthor(автор комментария):CharFieldсmax_length=100created_date(дата создания):DateTimeFieldсauto_now_add=True
- Добавьте метод
__str__(self), который будет возвращать первые 50 символов текста комментария. - Выполните команды
python manage.py makemigrations <ваше_приложение>иpython manage.py migrate, чтобы применить изменения к базе данных. - (Необязательно, но полезно для проверки) Запустите
python manage.py shellи попробуйте создать несколько объектовCommentиPostпрограммно. Убедитесь, что всё работает.
Теперь вы умеете определять структуру данных для вашего приложения с помощью моделей Django и управлять изменениями в базе данных с помощью миграций. Это фундаментальные навыки для любого Django-разработчика.
Далее мы научимся связывать наши модели с веб-интерфейсом: настроим URL-маршрутизацию и поработаем с шаблонами, чтобы пользователи могли взаимодействовать с вашими данными.