Модели в Django — это сердце вашего приложения при работе с данными. По сути, модель — это просто "чертеж" для информации, которую мы храним в базе данных. Класс модели становится таблицей, а его атрибуты — колонками.
Django использует ORM — умную систему, которая позволяет не писать сложные SQL-запросы. Вместо этого вы работаете с данными на Python, а Django сам общается с базой данных.
Как создать модель
Создадим класс модели в файле models.py приложения "Блог". Для этого давайте использовать следующий кейс: у нас есть статьи, и каждая статья имеет заголовок, содержимое, автора, дату публикации и идентификатор.
Пример модели "Статья"
from django.db import models
class Article(models.Model):
# Поле для заголовка статьи
title = models.CharField(max_length=200, verbose_name="Заголовок")
# Поле для содержания статьи
content = models.TextField(verbose_name="Содержание")
# Поле для автора статьи, строка пока (но скоро заменим на ForeignKey)
author = models.CharField(max_length=100, verbose_name="Автор")
# Поле для даты публикации
published_date = models.DateTimeField(auto_now_add=True, verbose_name="Дата публикации")
# Магический метод для красивого отображения объекта в админке
def __str__(self):
return self.title
models.Model: все модели в Django должны наследовать отmodels.Model. Это необходимо для активации всех прелестей Django ORM.CharFieldиTextField: специальные типы полей, которые определяют, как данные хранятся в базе данных. Например,CharFieldхранит строки фиксированной длины, аTextField— длинные тексты. Указаниеmax_length— обязательное дляCharField.DateTimeField: хранит дату и время. Атрибутauto_now_add=Trueавтоматически устанавливает текущую дату при создании записи.verbose_name: это удобочитаемое имя поля, которое отображается в админке и других местах.__str__(): рекомендуется переопределить этот метод, чтобы объекты модели имели читаемое представление, например, название статьи.
Поля модели и их типы
Django предоставляет множество различных типов полей для моделей. Вот несколько наиболее часто используемых:
| Поле | Описание | Пример использования |
|---|---|---|
CharField |
Строка фиксированной длины | Имя пользователя, заголовок статьи |
TextField |
Длинный текст | Описание, содержание статьи |
IntegerField |
Целое число | Количество просмотров, рейтинг |
BooleanField |
Логический тип данных | Активен/Неактивен |
DateTimeField |
Дата и время | Дата публикации, дата регистрации |
ForeignKey |
Одно ко многим (связь между моделями) | Привязка статьи к автору |
ManyToManyField |
Связь многие ко многим | Теги, подписчики |
EmailField |
Проверка на валидный email | Контактный email |
SlugField |
Для создания URL-friendly строк | slug для статьи, категории |
Для полного списка полей обязательно загляните в официальную документацию Django.
Взаимодействие модели с базой данных
Шаг 1: Регистрация модели в админке
Чтобы можно было видеть нашу модель в админке Django, нужно зарегистрировать её в файле admin.py:
from django.contrib import admin
from .models import Article
# Регистрация модели в админке
admin.site.register(Article)
Теперь, если вы запустите сервер (команда python manage.py runserver) и перейдете в админ-зону (обычно это http://127.0.0.1:8000/admin), вы увидите раздел для управления статьями.
Шаг 2: Миграции
Каждый раз, когда вы создаете или изменяете модель, Django требует "миграции" изменений в базу данных. Это делается в два этапа:
Создание файлов миграций:
python manage.py makemigrationsDjango проанализирует ваши изменения в моделях и создаст файл с инструкциями для базы данных.
Применение миграций:
python manage.py migrateЭта команда "встраивает" миграции в базу данных, создавая или модифицируя таблицы.
Шаг 3: Добавление данных в модель
Теперь мы можем добавить статьи через интерфейс админки. Но что, если мы хотим сделать это программно? Для этого подойдёт Django Shell:
python manage.py shell
И внутри оболочки Python:
from blog.models import Article
# Создание новой записи
article = Article.objects.create(
title="Первая статья",
content="Это содержимое моей первой статьи в блоге.",
author="Иван Иванов"
)
# Обновление заголовка (если потребуется)
article.title = "Обновленный заголовок"
article.save()
# Вывод всех статей
all_articles = Article.objects.all()
for a in all_articles:
print(a.title)
Зачем это нужно?
Модели Django — это основа практически любого веб-приложения. Они позволяют нам эффективно работать с данными, предоставляют возможности для валидации и упрощают взаимодействие с базой данных. Все действия — от простого создания записи до сложных SQL-запросов — можно выполнять через ORM, не прибегая к ручному написанию SQL-кода.
Кроме того, модели тесно интегрированы с другими компонентами Django, такими, как формы, админка и сериализаторы (которые мы будем использовать в будущем для API). Поэтому правильное понимание и проектирование моделей значительно облегчает разработку проекта.
Типичные ошибки
Одна из классических ошибок новичков — забыть добавить новую модель или приложение в INSTALLED_APPS. Если вы не видите изменений в админке или получаете сообщение о том, что таблицы не существуют, проверьте, зарегистрирована ли ваша модель в проекте и выполнены ли миграции.
Другая ловушка связана с изменением существующих моделей. После добавления новых полей нужно всегда генерировать миграции и применять их. Если это пропустить, база данных останется в старом состоянии.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ