Задание: Библиотека книг
Описание проекта
Создайте 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 по nameAuthorAdmin: list_display = [first_name, last_name, email], search по last_name и first_nameBookAdmin: 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-файл создан
Связь с теорией и примерами
- Meta options: Теория → Класс Meta
- Admin: Теория → Admin-панель, Примеры → admin.py
- Fixtures: Решения → Задача 18
- Типичные ошибки: 🐛 Ошибки