## Модели 1. **Comment**: - **`author`** (ForeignKey): Связывает поле с моделью пользователя, который создал комментарий. - **`content`** (TextField): Текст комментария. - **`created`** (DateTimeField): Дата и время создания комментария (автоматически добавляется). - **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически). 2. **CommentArticles**: - **`article`** (ForeignKey): Связь с моделью статьи (Article). 1. **CommentTodos**: - **`todo`** (ForeignKey): Связь с моделью задачи (Todo). 1. **CommentTenant**: - **`tenant`** (ForeignKey): Связь с моделью арендатора (Tenant). 1. **CommentGoods**: - `**goods**` (ForeignKey): Связь с моделью имущества (Goods). 1. **CommentPropertyObject**: - **`object`** (ForeignKey): Связь с моделью объекта (Object). 1. **CommentMaintenanceHistories**: - `**maintenancehistory**` (ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory). 1. **CommentContract**: - **`contract`** (ForeignKey): Связь с моделью контракта (Contract). ## Сериализатор 1. **CommentSerializer:** - **`author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. - **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - `**updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`body`:** CharField, который использует поле content модели Comment. - **Методы:** - **`get_author`:** Получает сериализованные данные об авторе комментария. - **`create`:** Создает новый комментарий с указанными данными, включая автора и связанный объект (article). 2. **CommentTodosSerializer:** - `**author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. - **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`body`:** CharField, который использует поле content модели CommentTodos. - **Методы:** - **`get_author`:** Получает сериализованные данные об авторе комментария. - `**create`:** Создает новый комментарий для задачи с указанными данными, включая автора и связанную задачу (todo). ## Маршрутизатор 1. **comment-article:** URL для создания и получения комментариев к статьям. - `articles//comments` - `views.CommentView.as_view()` - `name='comment-article'` 1. **comment-delete:** URL для удаления комментариев к статьям по их идентификатору. - `articles//comments/` - `views.DeleteCommentView.as_view()` - `name='comment-delete'` 1. **comment-todo-article:** URL для создания и получения комментариев к задачам. - `todos//comments` - `views.CommentTodoView.as_view()` - `name='comment-todo-article'` 1. **comment-todo-delete:** URL для удаления комментариев к задачам по их идентификатору. - `todos//comments//` - `views.DeleteCommentTodoView.as_view()` - `name='comment-todo-delete'` ## Контроллер 1. **CommentView:** - Это представление позволяет создавать и получать комментарии к статьям. - `generics.ListCreateAPIView`: Для списка и создания комментариев. - `get_permissions`: Проверка прав доступа. - `post`: Создание комментария. - `list`: Получение списка комментариев. - `DestroyAPIView` не используется здесь, поэтому удаление комментариев не поддерживается. 2. **DeleteCommentView:** - Это представление предназначено для удаления комментариев к статьям. - `generics.DestroyAPIView`: Для удаления комментариев. - `destroy`: Удаление комментария по его идентификатору и слагу статьи. 3. **CommentTodoView:** - Это представление позволяет создавать и получать комментарии к задачам. - `generics.ListCreateAPIView`: Для списка и создания комментариев. - `get_permissions`: Проверка прав доступа. - `post`: Создание комментария. - `list`: Получение списка комментариев. - `DestroyAPIView` не используется здесь, поэтому удаление комментариев не поддерживается. 4. **DeleteCommentTodoView:** - Это представление предназначено для удаления комментариев к задачам. - `generics.DestroyAPIView`: Для удаления комментариев. - `destroy`: Удаление комментария по его идентификатору и идентификатору задачи.