JavaRush /Курсы /Модуль 3: Django /Работа с моделями в приложении

Работа с моделями в приложении

Модуль 3: Django
6 уровень , 5 лекция
Открыта

Модели в 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 требует "миграции" изменений в базу данных. Это делается в два этапа:

  1. Создание файлов миграций:

    python manage.py makemigrations
    

    Django проанализирует ваши изменения в моделях и создаст файл с инструкциями для базы данных.

  2. Применение миграций:

    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. Если вы не видите изменений в админке или получаете сообщение о том, что таблицы не существуют, проверьте, зарегистрирована ли ваша модель в проекте и выполнены ли миграции.

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

1
Задача
Модуль 3: Django, 6 уровень, 5 лекция
Недоступна
Создание модели
Создание модели
1
Задача
Модуль 3: Django, 6 уровень, 5 лекция
Недоступна
Работа с объектами модели
Работа с объектами модели
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ivan Уровень 59
13 июля 2025
Во второй задаче не надо делать миграции и добавлять книги вручную. Требуется только прописать соответсвующие команды в файлах солюшн и шелл_командс. С выполненными миграциями задача не засчитывается. В таком случае надо удалить миграции и базу данных.