Блок 1: Модели
models.py вашего приложения.
Задание 1: Модель Project
Создайте модель Project со следующими полями:
- Название проекта: строковое, уникальное
- Описание проекта: строковое, большое поле, обязательно к заполнению
- Дата создания проекта: должна проставляться автоматически при создании
Задание 2: Модель Task
Создайте модель Task со следующими полями:
- Название задачи: строковое поле, уникальное, минимальная длина названия — 10 символов
- Описание: большое строковое поле, может быть пустым
- Статус: строковое поле максимальной длины в 15 символов, должно быть полем выбора разных статусов. По умолчанию все задачи новые
- Приоритет: строковое поле максимальной длины в 15 символов, должно быть полем выбора разных приоритетов
- Проект: связь с моделью Project, при удалении проекта все задачи должны удаляться
- Дата создания задачи: поле, поддерживающее и дату, и время, заполняется автоматически только при создании
- Дата обновления: поле, поддерживающее и дату, и время, заполняется автоматически всегда
- Дата удаления: поле, в котором может ничего не быть
Задание 3: Расширение Task — теги и срок выполнения
Расширьте модель Task дополнительным хранением тегов:
- Создайте модель тегов (
Tag): имя тэга — строковое поле, уникальное - Добавьте поле
due_date(срок выполнения) в модельTask - Свяжите модель задачи с тегами через связь "Многие ко многим", добавив в модель задачи новое поле
tags
Блок 2: Admin-панель
admin.py.
Задание 4: Базовая настройка Admin
Настройте отображение моделей Project, Task, Tag в админ-панели. Реализуйте следующие возможности:
- Поиск по названию задачи для модели
Task - Поиск по названию проекта для модели
Project - У модели
Taskв Админ-панели должны отображаться поля: название задачи, проект, статус, приоритетность, дата создания, дата сдачи задачи (due_date) - У модели
Projectдолжны отображаться поля: название проекта, дата создания проекта - Для модели
Taskдолжна быть возможность фильтрации по полям: статус, приоритетность, проект, дата создания, дата сдачи задачи
Задание 5: Связь Task → User
Создайте связь модели пользователя (User) с моделью Task.
Добавьте связь к модели Task через поле assignee, которое будет ссылаться на пользователя. При выборе типа связи учтите, что на одной задаче может быть одновременно только один сотрудник.
Задание 6: Пользователь в Admin
Добавьте нового пользователя и задачи для него. Для этого выполните действия:
- Создайте нового пользователя через Административную панель, добавьте новые задачи и назначьте его на эти задачи
- Добавьте
assigneeв список отображаемых полей в Административной панели - Добавьте в Административную панель возможность фильтрации задач по конкретному
assignee
Блок 3: Класс Meta
Задание 7: Meta для модели Project
Добавьте настройки к модели Project:
- Добавьте порядок отображения всех проектов по их названию в порядке убывания
- Добавьте отображение названия модели
Projectво множественном и единственном числах - Добавьте настройку уникальности каждого проекта сразу по нескольким полям (название и описание проекта)
Задание 8: Meta для модели Task
Добавьте настройки к модели Task:
- Добавьте отображение названия модели
Taskво множественном и единственном числах - Добавьте порядок отображения всех задач по: дате сдачи задачи от самой дальней даты к самой ближайшей; закреплённому за задачей сотруднику
- Добавьте настройку уникальности задачи по её названию и проекту. Это должна быть одна общая категория
Блок 4: Файлы проекта
Задание 9: Модель ProjectFile
- Создайте новую модель
ProjectFileдля файлов проекта. Модель должна включать поля:- Название файла: обязательно к заполнению, максимальная длина имени — 120 символов
- Файл: должен загружаться в папку "проекты"
- Дата создания файла: заполняется автоматически только при создании
- Добавьте новое поле для файлов в модель
Project, свяжите его с новой модельюProjectFile. Предполагается, что одни и те же файлы могут быть в разных проектах, каждый проект может иметь много файлов
Задание 10: Admin для ProjectFile
Настройте новую модель ProjectFile:
- Настройте отображение полей в Административной модели: имя файла, сам файл, дата создания
- Добавьте возможность искать нужный файл по его имени
- Добавьте возможность фильтровать файлы по дате создания
Задание 11: Meta для ProjectFile
Настройте дополнительные настройки для модели ProjectFile:
- Настройте возможность отображения названия модели во множественном и единственном числах
- Настройте порядок отображения файлов в Административной панели по дате создания (от самого последнего созданного файла к самому первому созданному)
Блок 5: Вычисляемые поля
Задание 12: Property + Admin
Добавьте отображение количества файлов для каждого проекта. Для этого выполните действия:
- Добавьте
propertyполе для моделиProject, которое позволит получать количество файлов для конкретного объектаProject - Добавьте в Административный класс
ProjectAdminвозможность отображения нового поля "count of Files", которое будет содержать количество файлов для конкретного проекта - Добавьте полученную логику в список отображаемых полей
Блок 6: Admin-действия
Задание 13: Замена пробелов на подчёркивания
Добавьте возможность заменять пробелы на нижние подчёркивания для объектов проекта. Для этого выполните действия:
- Создайте Админ-действие, которое позволит к выделенным объектам применять операцию по замене одного символа на другой
- Дайте этому Админ-действию более понятное название
- Зарегистрируйте это действие для модели
Projectв Админ-панели
Задание 14: Смена статуса на "Closed"
Добавьте возможность обновления статуса всех выделенных задач на "Закрыто". Для этого выполните действия:
- Создайте Админ-действие, которое позволит к выделенным объектам задач применять операцию по обновлению статуса на какой-то определённый ("Выполнено")
- Задайте этому действию укороченное название
- Зарегистрируйте это действие для модели
Taskв Админ-панели
Задание 15: Смена приоритета (4 действия)
Добавьте возможность обновления приоритетности всех выделенных задач на "Низкий", "Средний", "Высокий" и на "Очень высокий". Для этого выполните действия:
- Создайте разные Админ-действия, которые позволят к выделенным объектам задач применять операцию по обновлению приоритетности:
- Отдельно на "Низкий"
- Отдельно на "Средний"
- Отдельно на "Высокий"
- Отдельно на "Очень высокий"
- Задайте этим действиям укороченное название
- Зарегистрируйте все эти действия для модели
Taskв Админ-панели
Блок 7: Разрешения и Fixtures
Задание 16: Группы разрешений
Создайте группы разрешений:
Группа "Manager". Менеджер может:
- Просматривать все группы
- Просматривать все разрешения
- Добавлять новые разрешения
- Добавлять новых пользователей, просматривать всех пользователей
- Создавать, изменять, удалять, просматривать все проекты
- Создавать, изменять, удалять, просматривать все файлы проектов
- Добавлять, изменять, просматривать все тэги
- Добавлять, изменять, просматривать все задачи
Группа "Client". Клиент может:
- Создавать, изменять, просматривать список всех пользователей
- Создавать, изменять, просматривать список всех проектов
- Создавать, просматривать список всех файлов проектов
- Создавать, изменять, удалять, просматривать список всех тегов
- Создавать, изменять, удалять, просматривать список всех задач
Группа "Developer". Разработчик может:
- Добавлять, изменять, удалять, просматривать список пользователей
- Создавать, изменять, удалять, просматривать все проекты
- Создавать, изменять, удалять, просматривать все файлы проектов
- Создавать, изменять, удалять, просматривать все теги
- Создавать, изменять, удалять, просматривать все задачи
Задание 17: Пользователь с группой Client
- Создайте нового пользователя
- После создания измените его, добавив ему поле
is_staff, чтобы он смог заходить в Административную панель - Добавьте пользователю группу разрешений "Client"
- Зайдите под пользователем Клиента
- Попробуйте выполнить те действия, которые клиенту не должны быть доступны. Например: удалить проект, удалить пользователя, изменить файл проекта
Задание 18: Fixtures
Создайте снимки базы данных для всех пользователей и групп пользователей. Для этого выполните действия:
- К уже готовым пользователям и группам разрешений примените создание снимка данных, чтобы избежать повторных заполнений данных с нуля при удалении базы
- Удалите базу данных
- Примените миграции с нуля
- Воспроизведите "заснятые" данные к пользователям и группам разрешений через команду в консоли