## Модели 1. **Comment**: - **`author`** (ForeignKey): Связывает поле с моделью пользователя, который создал комментарий. - **`content`** (TextField): Текст комментария. - **`created`** (DateTimeField): Дата и время создания комментария (автоматически добавляется). - **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически). 2. **CommentArticles**: - **`article`**(ForeignKey): Связь с моделью статьи (Article). 3. **CommentTodos**: - **`todo`**(ForeignKey): Связь с моделью задачи (Todo). 4. **CommentTenant**: - **`tenant`**(ForeignKey): Связь с моделью арендатора (Tenant). 5. **CommentGoods**: - `**goods**`(ForeignKey): Связь с моделью имущества (Goods). 6. **CommentPropertyObject**: - **`object`**(ForeignKey): Связь с моделью объекта (Object). 7. **CommentMaintenanceHistories**: - `**maintenancehistory**`(ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory). 8. **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`: Удаление комментария по его идентификатору и идентификатору задачи.