85 lines
7.2 KiB
Markdown
85 lines
7.2 KiB
Markdown
### Кортежи статуса задачи
|
||
TASK_STATUS = (
|
||
('New', 'Новая'),
|
||
('Deleted', 'Удалено'),
|
||
('Waiting', 'Ожидание'),
|
||
('Done', 'Выполнена'),
|
||
)
|
||
### Кортеж уровня важности
|
||
PRIORITY = (
|
||
('Low', 'Низкий'),
|
||
('Medium', 'Средний'),
|
||
('High', 'Высокий'),
|
||
)
|
||
## Модель задачи
|
||
1. **`author`** (ForeignKey): Ссылка на пользователя, который создал задачу.
|
||
2. **`title`** (CharField): Название задачи (до 150 символов).
|
||
3. **`summary`** (TextField): Краткое описание задачи.
|
||
4. **`content`** (TextField): Подробное описание задачи.
|
||
5. **`is_active`** (BooleanField): Флаг, указывающий на активность задачи.
|
||
6. **`is_deleted`** (BooleanField): Флаг, указывающий на удаление задачи.
|
||
7. **`priority`** (CharField): Приоритет задачи (выбор из предустановленных значений).
|
||
8. **`status`** (CharField): Статус задачи (выбор из предустановленных значений).
|
||
9. **`is_complete`** (BooleanField): Флаг, указывающий на завершение задачи.
|
||
10. `**start_time**` (DateTimeField): Дата и время начала задачи.
|
||
11. **`end_time`** (DateTimeField): Крайний срок выполнения задачи.
|
||
12. **`created`** (DateTimeField): Время создания задачи (автоматически заполняется при создании).
|
||
13. **`updated`** (DateTimeField): Время последнего обновления задачи (автоматически обновляется при изменениях).
|
||
14. **`substacles`** (ManyToManyField): Связь между задачами, представляющая подзадачи текущей задачи.
|
||
15. `**favorites**` (ManyToManyField): Пользователи, которые добавили задачу в избранное.
|
||
16. **`suppliers`** (ManyToManyField): Пользователи, ответственные за выполнение задачи.
|
||
17. **`supporters`** (ManyToManyField): Соисполнители задачи.
|
||
18. **`observers`** (ManyToManyField): Пользователи, наблюдающие за выполнением задачи.
|
||
19. `**`tags** (TaggableManager): Теги, связанные с задачей для удобной классификации.
|
||
|
||
## Сериализатор
|
||
|
||
1. **TodoSerializer**:
|
||
- `id` (IntegerField): Идентификатор задачи.
|
||
- `title` (CharField): Заголовок задачи.
|
||
- `description` (CharField): Описание задачи.
|
||
- `body` (CharField): Текст задачи.
|
||
- `tagList` (ListField): Список тегов задачи.
|
||
- `is_complete` (BooleanField): Завершена ли задача.
|
||
- `status` (CharField): Статус задачи.
|
||
- `priority` (CharField): Приоритет задачи.
|
||
- `is_deleted` (BooleanField): Удалена ли задача.
|
||
- `is_active` (BooleanField): Активна ли задача.
|
||
- `createdAt` (DateTimeField): Дата и время создания задачи.
|
||
- `updatedAt` (DateTimeField): Дата и время последнего обновления задачи.
|
||
- `startTimedAt` (DateTimeField): Дата и время начала задачи.
|
||
- `endTimedAt` (DateTimeField): Дата и время завершения задачи.
|
||
- `author` (AuthorSerializer): Сериализатор автора задачи.
|
||
- `substacles` (ListField): Список препятствий задачи.
|
||
- `favorited` (BooleanField): Понравилась ли задача.
|
||
- `favoritesCount` (IntegerField): Количество пользователей, отметивших задачу как понравившуюся.
|
||
- `supplierd` (IntegerField): Идентификатор поставщика.
|
||
- `suppliersCount` (IntegerField): Количество поставщиков.
|
||
- `supporterd` (IntegerField): Идентификатор поддержки.
|
||
- `supportersCount` (IntegerField): Количество поддерживающих.
|
||
- `observerd` (IntegerField): Идентификатор наблюдателя.
|
||
- `observersCount` (IntegerField): Количество наблюдателей.
|
||
## Маршрутизатор
|
||
|
||
- `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам.
|
||
|
||
- `todo_router.register('todos', views.TodoView, basename='todos')` регистрирует представление `TodoView` для работы с задачами. Аргументы `basename='todos'` используются для создания имени маршрута, которое будет использоваться в генерации URL (например, `todos-list`, `todos-detail`, `todos-create` `todos-edit` `todos-delete`.).
|
||
|
||
- `todo_router.register('tags', views.TagView)` регистрирует представление `TagView` для работы с тегами. Аналогично создаются маршруты для работы с тегами (`tags-list`, `tags-detail`, `tags-create` `tags-edit` `tags-delete`).
|
||
|
||
## Контроллер
|
||
|
||
1. **TodoView**:
|
||
- Представление для работы с задачами (todos).
|
||
- Использует `ModelViewSet`, который предоставляет CRUD-функциональность и многое другое.
|
||
- Включает методы `list`, `create`, `retrieve`, `update`, `destroy` для обработки соответствующих HTTP-запросов.
|
||
- Содержит дополнительные действия (`favorite`, `feed`) с использованием декоратора `@action`.
|
||
## Права доступа
|
||
|
||
1. **IsOwnerOrCollaborator**:
|
||
- Позволяет редактирование задач только владельцу задачи или соисполнителям.
|
||
- Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
|
||
|
||
1. **CanViewTodoDetail**:
|
||
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
|
||
- Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным. |