## Кортежи статуса задачи GENDER_CHOICES = ( ('n', 'Не указано'), ('m', 'Мужчина'), ('f', 'Женщина'), ) ## Модель команда 1. **`first_name`** (CharField): Имя пользователя (до 60 символов). 2. **`last_name`** (CharField): Фамилия пользователя (до 60 символов). 3. **`middle_name`** (CharField): Фамилия пользователя (до 60 символов). 4. **`position`** (CharField): Должность участника команды 5. **`work_start_time`** (DateField): Дата начала работы участника 6. **`work_end_time`** (DateField): Дата окончания работы участника 7. **`mobile`** (CharField): Мобильный номер участника. 8. **`work_phone`** (CharField): Рабочий телефон участника. 9. **`internal_number`** (CharField): Внутренний номер участника. 10. **`email`** (EmailField): Адрес электронной почты пользователя (уникальный). 11. **`personal_email`** (EmailField): Персональный e-mail участника. 12. `**birth_date**` (DateField): Дата рождения участника. 13. `website` (URLField): Сайт участника. ## Модель зона ответственности 1. **`object_related`** (ForeignKey): Связь с объектом. 2. `**team_related**` (ManyToManyField): Связь с участниками команды. ## Сериализатор 1. **TeamSerializer**: - `teamLastName` (CharField): Фамилия команды. - `teamFirstName` (CharField): Имя команды. - `teamMiddleName` (CharField): Отчество команды. - `teamBirthDate` (DateField): Дата рождения команды. - `teamPosition` (CharField): Должность в команде. - `teamWorkStartTime` (TimeField): Время начала работы команды. - `teamWorkEndTime` (TimeField): Время окончания работы команды. - `teamMobile` (CharField): Мобильный телефон команды. - `teamWorkPhone` (CharField): Рабочий телефон команды. - `teamInternalNumber` (CharField): Внутренний номер команды. - `teamEmail` (EmailField): Электронная почта команды. - `teamPersonalEmail` (EmailField): Личная электронная почта команды. - `teamWebsite` (URLField): Веб-сайт команды. - `author` (AuthorSerializer): Сериализатор для автора команды. - `createdAt` (DateTimeField): Дата создания команды. - `updatedAt` (DateTimeField): Дата последнего обновления команды. - `create(self, validated_data)`: Метод для создания новой команды. - `update(self, instance, validated_data)`: Метод для обновления существующей команды. 2. **WorkTeamZoneSerializer**: - `object_related` (PrimaryKeyRelatedField): Связь с объектом через его идентификатор. - `team_related` (PrimaryKeyRelatedField, many=True): Связь с командами через их идентификаторы (множественное). - `author` (AuthorSerializer): Сериализатор для автора зоны ответственности команды. - `createdAt` (DateTimeField): Дата создания зоны ответственности команды. - `updatedAt` (DateTimeField): Дата последнего обновления зоны ответственности команды. - `create(self, validated_data)`: Метод для создания новой зоны ответственности команды. - `update(self, instance, validated_data)`: Метод для обновления существующей зоны ответственности команды. ## Маршрутизатор 1. `router.register('teams', TeamViewSet, basename='teams')`: Регистрация представления `TeamViewSet` в маршрутизаторе под именем `'teams'`, с указанием базового имени `'teams'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) команд. 2. `router.register('work-team-zones', WorkTeamZoneViewSet, basename='work-team-zones')`: Регистрация представления `WorkTeamZoneViewSet` в маршрутизаторе под именем `'work-team-zones'`, с указанием базового имени `'work-team-zones'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) зон ответственности команд. ## Контроллер ### Views и API 1. Определение представления `TeamViewSet` как подкласса `viewsets.ModelViewSet`, который предоставляет стандартный набор операций CRUD для модели `Team`. - `queryset = Team.objects.all()`: Получение всех объектов модели `Team` из базы данных. - `serializer_class = TeamSerializer`: Использование сериализатора `TeamSerializer` для сериализации данных. - `permission_classes = [IsAuthenticatedOrReadOnly]`: Определение разрешений доступа, требующих аутентификации для изменения данных и только чтения без аутентификации. - `lookup_field = 'id'`: Использование поля 'id' для поиска объектов. - `http_method_names = ['get', 'post', 'put', 'patch', 'delete']`: Разрешенные HTTP-методы для данного представления. 2. Определение методов для обработки различных HTTP-запросов: - `get_permissions`: Переопределение метода для применения разных разрешений в зависимости от типа действия. - `list`: Метод для получения списка всех команд. - `create`: Метод для создания новой команды. - `retrieve`: Метод для получения информации о конкретной команде. - `update`: Метод для обновления информации о команде. - `destroy`: Метод для удаления команды. 3. Аналогично определено представление `WorkTeamZoneViewSet` для модели `WorkTeamZone`. - `queryset = WorkTeamZone.objects.all()`: Получение всех объектов модели `WorkTeamZone` из базы данных. - `serializer_class = WorkTeamZoneSerializer`: Использование сериализатора `WorkTeamZoneSerializer`. - `permission_classes = [IsAuthenticated]`: Определение разрешений доступа, требующих аутентификации для всех действий. - Определены методы для обработки различных HTTP-запросов (список, создание, получение, обновление, удаление) с соответствующей логикой обработки данных и проверкой прав доступа.