🏠 Домашнее задание

Закрепляющее задание
Это не LMS-задание. Отдельного ДЗ по практикуму 2 в источнике нет. Ниже — закрепляющее задание для самостоятельной работы, которое охватывает ключевые навыки урока.

⚡ Задание кратко

Создайте Django-приложение "Библиотека книг" с моделями Author, Book, Genre. Настройте Meta, Admin (list_display, search, filter), admin-действия и fixtures.

Подробнее ↓

Задание: Библиотека книг

Описание проекта

Создайте Django-приложение library внутри существующего или нового проекта. Реализуйте следующие модели и их настройки.

Часть 1: Модели

Модель Genre (Жанр)

  • Название жанра: строковое, уникальное, максимум 50 символов
  • Описание: большое текстовое поле, может быть пустым
  • Meta: сортировка по названию, verbose_name = "Genre" / "Genres"

Модель Author (Автор)

  • Имя: строковое, максимум 100 символов
  • Фамилия: строковое, максимум 100 символов
  • Email: строковое, уникальное, может быть пустым
  • Дата рождения: только дата (DateField), может быть пустой
  • Meta: сортировка по фамилии, verbose_name = "Author" / "Authors", уникальность по (first_name, last_name)

Модель Book (Книга)

  • Название: строковое, уникальное, минимум 3 символа (MinLengthValidator)
  • Автор: ForeignKey → Author, при удалении автора — задать NULL (SET_NULL)
  • Жанры: ManyToManyField → Genre (одна книга может иметь несколько жанров)
  • Год издания: IntegerField, может быть пустым
  • Статус: CharField с choices: Available / Borrowed / Reserved; по умолчанию Available
  • Дата добавления: DateTimeField, auto_now_add=True
  • Meta: сортировка по названию, verbose_name = "Book" / "Books", уникальность по (title, author)

Часть 2: Admin-панель

  • GenreAdmin: list_display = [name], search по name
  • AuthorAdmin: list_display = [first_name, last_name, email], search по last_name и first_name
  • BookAdmin: list_display = [title, author, status, year, created_at], search по title и author__last_name, list_filter по status и year

Часть 3: Admin-действия

  • Для BookAdmin: действие "Mark as Available" — устанавливает status = 'Available' для выделенных книг
  • Для BookAdmin: действие "Mark as Borrowed" — устанавливает status = 'Borrowed'

Часть 4: Fixtures

  • Создайте несколько жанров и авторов через Admin
  • Сохраните их в fixture: python manage.py dumpdata library --indent=4 > library/fixtures/initial_data.json
  • Удалите объекты из Admin, затем восстановите через loaddata

Подготовка окружения

# Создать виртуальное окружение
python -m venv venv
venv\Scripts\activate   # Windows

# Установить зависимости
pip install django

# Создать проект и приложение
django-admin startproject myproject .
python manage.py startapp library

# Добавить 'library' в settings.py INSTALLED_APPS

# Выполнить миграции
python manage.py makemigrations library
python manage.py migrate

# Создать суперпользователя
python manage.py createsuperuser

# Запустить сервер
python manage.py runserver
# Открыть http://127.0.0.1:8000/admin/

Проверка в VS Code

Запуск через терминал (F5)

Создайте файл .vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Django runserver",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": ["runserver"],
      "django": true,
      "justMyCode": true
    }
  ]
}

Что проверить

  • Открыть http://127.0.0.1:8000/admin/ — войти под суперпользователем
  • Убедиться, что все три модели отображаются в Admin
  • Создать жанр, автора, несколько книг
  • Проверить поиск и фильтрацию в BookAdmin
  • Выделить несколько книг → применить действие "Mark as Borrowed"
  • Выполнить dumpdata и убедиться, что JSON-файл создан

Связь с теорией и примерами