🏗️ Капстоун B — Library / Каталог (Django)
⚡ Кратко: что строим
Library / Каталог — полноценное Django 5 приложение для управления библиотечным каталогом: авторы, книги, жанры, издательства. Богатая Django Admin с inline-формами, actions и оптимизированными ORM-запросами.
- Стек: Django 5.x · django-environ · SQLite (dev)
- Результат: рабочая админка с моделями, фильтрами, inline, actions; ORM-запросы без N+1
- Закрывает: callout-verify из уроков 15 (валидаторы, M2M), 19/24 (ModelAdmin, inline, actions, queryset.update + сигналы), 22 (N+1, select_related/prefetch_related)
Время прохождения: ~4–5 часов (7 этапов по 30–45 минут каждый).
📖 О проекте
Library / Каталог — Django-приложение для управления библиотечным каталогом. Администратор добавляет авторов, книги (с жанрами и издательством), управляет экземплярами через inline-формы прямо из страницы книги. Actions позволяют одним кликом обновить статус нескольких записей.
Серия начинается с создания Django-проекта с нуля и поэтапно строит приложение до
уровня реальной production-готовой системы управления данными. Особое внимание — правильной
работе с Django ORM: устранение N+1 через select_related /
prefetch_related, аннотации и агрегации.
Что закрывает этот капстоун
В ходе основного курса ряд тем был помечен callout-verify — сложные места,
требующие практики в реальном проекте. Данная серия закрывает:
-
Урок 15 — Django Models: Library —
валидаторы поля и
full_clean()в Django, правильные M2M-паттерны -
Урок 19 — Django Admin / Users —
ModelAdmin,@admin.register,list_display,list_filter,search_fields -
Урок 22 — Django ORM Queries —
select_related/prefetch_related, устранение N+1,annotate/aggregate -
Урок 24 — Django Admin Inline —
TabularInline/StackedInline,@admin.action, разница междуqueryset.update()и сигналами
Технологический стек
📋 Этапы серии
Каждый этап продолжает проект предыдущего. Проходить строго по порядку.
Проект и настройка
Создаём venv, Django-проект командой django-admin startproject, настраиваем settings.py через django-environ, пишем .env.
БД, миграции, суперпользователь
Подключаем SQLite, запускаем makemigrations / migrate, создаём суперпользователя, проверяем вход в Django Admin.
Модели и связи
Описываем модели Author, Genre, Publisher, Book, BookCopy: ForeignKey, ManyToMany, OneToOne, Meta, __str__, валидаторы + full_clean().
ModelAdmin: список и фильтры
Регистрируем модели через @admin.register, настраиваем list_display, search_fields, list_filter, ordering, date_hierarchy.
Inline-формы и admin actions
Добавляем TabularInline для BookCopy внутри страницы книги, пишем @admin.action для массового обновления статуса. Разбираем разницу queryset.update() vs сигналы.
ORM правильно: N+1 закрыт
Django shell: filter/exclude/Q/F, annotate/aggregate, select_related/prefetch_related — устранение N+1 запросов.
Фикстуры, management-команды, финал
Создаём фикстуры через dumpdata/loaddata, пишем кастомную management-команду import_books, проходим финальный чеклист проекта.
📚 Что понадобится
- Урок 13 — Django: введение — проект, приложение, settings
- Урок 16 — Django: модели — поля, типы, миграции
- Урок 15 — Django Models: Library — связи, Meta, __str__
- Урок 19 — Django Admin / Users — ModelAdmin, базовая регистрация
- Урок 22 — Django ORM Queries — QuerySet API
- Урок 24 — Django Admin Inline — Inline, Actions
- Python 3.10+, pip, venv
- Git (базовые команды)
🚀 Как работать с серией
- Проходите этапы строго по порядку — каждый продолжает код предыдущего.
- Перед каждым этапом: прочитайте секцию «Цель» и «Затрагиваемые файлы».
- Над каждым блоком кода указан путь к файлу — не гадайте, куда писать.
- После каждого этапа: выполните шаги из раздела «Проверка».
- Если что-то пошло не так — секция «Проверка» содержит диагностику.