This commit is contained in:
2024-05-14 16:58:27 +03:00
parent 2762ac794a
commit 7988103495
13 changed files with 403 additions and 356 deletions

View File

@@ -11,10 +11,14 @@
## Сериализатор ## Сериализатор
1. **ArticleSerializer**: 1. **ArticleSerializer**:
- Сериализатор для модели статей (Article). - **`slug`:** (SlugField), уникальный идентификатор для URL статьи. Здесь он настроен как только для чтения (read-only).
- Поля: `slug`, `title`, `description`, `body`, `tagList`, `createdAt`, `updatedAt`, `favorited`, `favoritesCount`, `author`. - **`description`:** (CharField), отображает описание статьи и использует поле summary модели.
- `TaggitSerializer`: Используется для сериализации тегов статьи. - **`body`:** (CharField), содержит полное содержание статьи и использует поле content модели.
- Методы: `get_author`, `get_favorited`, `get_favoritesCount`, `create`, `update`. - **`tagList`:** (TagListSerializerField), отображает теги статьи и использует поле tags модели. Он также настроен как только для чтения.
- **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- `**updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- **`favorited` и `favoritesCount`** (SerializerMethodField): используются для получения информации о том, добавлена ли статья в избранное пользователем и сколько пользователей добавили эту статью в избранное соответственно.
- **`author`** (SerializerMethodField): с атрибутом read_only=True, который вызывает метод `get_author` для получения сериализованных данных об авторе статьи.
## Маршрутизатор ## Маршрутизатор
- **`article_router.register('articles', views.ArticleView, basename='articles')`**: Регистрация маршрута для представления `ArticleView` из `views.py` под именем 'articles'. `basename='articles'` указывает базовое имя для ссылок. - **`article_router.register('articles', views.ArticleView, basename='articles')`**: Регистрация маршрута для представления `ArticleView` из `views.py` под именем 'articles'. `basename='articles'` указывает базовое имя для ссылок.

View File

@@ -7,41 +7,41 @@
- **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически). - **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически).
2. **CommentArticles**: 2. **CommentArticles**:
- **`article`** (ForeignKey): Связь с моделью статьи (Article). - **`article`**(ForeignKey): Связь с моделью статьи (Article).
1. **CommentTodos**: 3. **CommentTodos**:
- **`todo`** (ForeignKey): Связь с моделью задачи (Todo). - **`todo`**(ForeignKey): Связь с моделью задачи (Todo).
1. **CommentTenant**: 4. **CommentTenant**:
- **`tenant`** (ForeignKey): Связь с моделью арендатора (Tenant). - **`tenant`**(ForeignKey): Связь с моделью арендатора (Tenant).
1. **CommentGoods**: 5. **CommentGoods**:
- `**goods**` (ForeignKey): Связь с моделью имущества (Goods). - `**goods**`(ForeignKey): Связь с моделью имущества (Goods).
1. **CommentPropertyObject**: 6. **CommentPropertyObject**:
- **`object`** (ForeignKey): Связь с моделью объекта (Object). - **`object`**(ForeignKey): Связь с моделью объекта (Object).
1. **CommentMaintenanceHistories**: 7. **CommentMaintenanceHistories**:
- `**maintenancehistory**` (ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory). - `**maintenancehistory**`(ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory).
1. **CommentContract**: 8. **CommentContract**:
- **`contract`** (ForeignKey): Связь с моделью контракта (Contract). - **`contract`**(ForeignKey): Связь с моделью контракта (Contract).
## Сериализатор ## Сериализатор
1. **CommentSerializer:** 1. **CommentSerializer:**
- **`author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. - **`author`**(SerializerMethodField): который вызывает метод `get_author` для получения сериализованных данных об авторе комментария.
- **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- `**updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - `**updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- **`body`:** CharField, который использует поле content модели Comment. - **`body`**(CharField): который использует поле content модели Comment.
- **Методы:** - **Методы:**
- **`get_author`:** Получает сериализованные данные об авторе комментария. - **`get_author`:** Получает сериализованные данные об авторе комментария.
- **`create`:** Создает новый комментарий с указанными данными, включая автора и связанный объект (article). - **`create`:** Создает новый комментарий с указанными данными, включая автора и связанный объект (article).
2. **CommentTodosSerializer:** 2. **CommentTodosSerializer:**
- `**author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. - `**author`**(SerializerMethodField):, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария.
- **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- **`updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - **`updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601.
- **`body`:** CharField, который использует поле content модели CommentTodos. - **`body`**(CharField): который использует поле content модели CommentTodos.
- **Методы:** - **Методы:**
- **`get_author`:** Получает сериализованные данные об авторе комментария. - **`get_author`:** Получает сериализованные данные об авторе комментария.
- `**create`:** Создает новый комментарий для задачи с указанными данными, включая автора и связанную задачу (todo). - `**create`:** Создает новый комментарий для задачи с указанными данными, включая автора и связанную задачу (todo).

View File

@@ -28,36 +28,36 @@
1. **ContractSerializer:** 1. **ContractSerializer:**
- `id`: Идентификатор договора. - `id`: Идентификатор договора.
- `contractContractType`: Тип договора. - `contractContractType`(CharField): Тип договора.
- `contractnumber`: Номер договора. - `contractnumber`(CharField): Номер договора.
- `contractStartDate`: Дата начала договора. - `contractStartDate`(DateField): Дата начала договора.
- `contractEndDate`: Дата окончания договора. - `contractEndDate`(DateField): Дата окончания договора, может быть пустым.
- `contractEsignature`: Наличие ЭЦП в договоре. - `contractEsignature`(BooleanField): Наличие ЭЦП в договоре.
- `contractEdo`: Наличие ЭДО в договоре. - `contractEdo`(BooleanField): Наличие ЭДО в договоре.
- `tenant`: Внешний ключ на модель арендатора. - `tenant`(TenantSerializer): Внешний ключ на модель арендатора.
- `goods`: Множественный внешний ключ на модель имущества. - `goods`(PrimaryKeyRelatedField): Множественный внешний ключ на модель имущества.
- `related_objects`: Множественный внешний ключ на модель объектов. - `related_objects`(PrimaryKeyRelatedField): Множественный внешний ключ на модель объектов.
- `contractFile`: Файл договора. - `contractFile`(FileField): Файл договора.
- `contractPhotoPp`: Фотография при приеме-передаче недвижимости. - `contractPhotoPp`(FileField): Фотография при приеме-передаче недвижимости.
- `author`: Информация об авторе (использует `AuthorSerializer`). - `author`(PrimaryKeyRelatedField): Информация об авторе (использует `AuthorSerializer`).
- `createdAt`: Дата создания. - `createdAt`(DateTimeField): Дата создания.
- `updatedAt`: Дата обновления. - `updatedAt`(DateTimeField): Дата обновления.
2. **PaymentSerializer:** 2. **PaymentSerializer:**
- `id`: Идентификатор платежа. - `id`: Идентификатор платежа.
- `contract`: Внешний ключ на модель договора. - `contract`(PrimaryKeyRelatedField): Внешний ключ на модель договора.
- `paymentFrequency`: Частота платежей. - `paymentFrequency`(CharField): Частота платежей.
- `paymentMethod`: Метод оплаты. - `paymentMethod`(CharField): Метод оплаты.
- `paymentType`: Тип оплаты. - `paymentType`(CharField): Тип оплаты.
- `paymentRentCost`: Стоимость аренды. - `paymentRentCost`(DecimalField): Стоимость аренды.
- `paymentRentRate`: Арендная ставка. - `paymentRentRate`(DecimalField): Арендная ставка.
- `paymentCompensation`: Компенсация. - `paymentCompensation`(CharField): Компенсация.
- `paymentSecurityDeposit`: Залог. - `paymentSecurityDeposit`(DecimalField): Залог.
- `paymentPaymentDuration`: Дата окончания оплаты. - `paymentPaymentDuration`(DateField): Дата окончания оплаты.
- `paymentIsPaid`: Оплачено ли. - `paymentIsPaid`(BooleanField): Оплачено ли.
- `author`: Информация об авторе (использует `AuthorSerializer`). - `author`(PrimaryKeyRelatedField): Информация об авторе (использует `AuthorSerializer`).
- `createdAt`: Дата создания. - `createdAt`(DateTimeField): Дата создания.
- `updatedAt`: Дата обновления. - `updatedAt`(DateTimeField): Дата обновления.
## Маршрутизатор ## Маршрутизатор
1. **URL для списка и деталей договоров:** 1. **URL для списка и деталей договоров:**

View File

@@ -1,76 +1,76 @@
## Модель имущества ## Модель имущества
1. **GoodsType:** 1. **GoodsType:**
- `name`: Название типа имущества. - `name`(CharField): Название типа имущества.
2. **ConsumableType:** 2. **ConsumableType:**
- `name`: Название типа расходуемых ТМЦ. - `name`(CharField): Название типа расходуемых ТМЦ.
3. **Goods:** 3. **Goods:**
- `goods_type`: (ForeignKey) Связь с типом имущества (`GoodsType`). - **`goods_type`** (ForeignKey): Связь с типом имущества (`GoodsType`).
- `goods_name`: (CharField) Название имущества. - **`goods_name`** (CharField): Название имущества.
- `inventory_number`: (CharField) Инвентарный номер имущества. - **`inventory_number`** (CharField): Инвентарный номер имущества.
- `description`: (TextField) Описание имущества. - **`description`** (TextField): Описание имущества.
- `goods_photo`: (ManyToManyField) Фотографии имущества (связь с моделью `ImageGoods`). - **`goods_photo`** (ManyToManyField): Фотографии имущества (связь с моделью `ImageGoods`).
- `condition_description`: (TextField) Описание состояния имущества. - **`condition_description`** (TextField): Описание состояния имущества.
- `damage_date_time`: (DateTimeField) Дата и время обнаружения порчи. - **`damage_date_time`** (DateTimeField): Дата и время обнаружения порчи.
- `related_object`: (ForeignKey) Связь с объектом (`Object`), к которому относится имущество. - **`related_object`** (ForeignKey): Связь с объектом (`Object`), к которому относится имущество.
- `responsible_person`: (CharField) Ответственное лицо за имущество. - **`responsible_person`** (CharField): Ответственное лицо за имущество.
- `status`: (CharField) Статус состояния имущества (`good` - хорошее, `damaged` - поврежденное). - **`status`** (CharField): Статус состояния имущества (`good` - хорошее, `damaged` - поврежденное).
4. **Consumable:** 4. **Consumable:**
- `consumable_type`: (ForeignKey) Связь с типом расходуемых ТМЦ (`ConsumableType`). - **`consumable_type`** (ForeignKey): Связь с типом расходуемых ТМЦ (`ConsumableType`).
- `name`: (CharField) Название расходуемого товара. - **`name`** (CharField): Название расходуемого товара.
- `description`: (TextField) Описание товара. - **`description`** (TextField): Описание товара.
- `consumable_photo`: (ManyToManyField) Фотографии товара (связь с моделью `ImageGoods`). - **`consumable_photo`** (ManyToManyField): Фотографии товара (связь с моделью `ImageGoods`).
- `quantity`: (PositiveIntegerField) Количество товара. - **`quantity`** (PositiveIntegerField): Количество товара.
- `quantity_unit`: (CharField) Единица измерения количества (выбор из предопределенных вариантов, например, шт., кг, л и т. д.). - **`quantity_unit`** (CharField): Единица измерения количества (выбор из предопределенных вариантов, например, шт., кг, л и т. д.).
- `related_object`: (ForeignKey) Связь с объектом (`Object`), к которому относится товар. - **`related_object`** (ForeignKey): Связь с объектом (`Object`), к которому относится товар.
- `responsible_person`: (CharField) Ответственное лицо за товар. - **`responsible_person`** (CharField): Ответственное лицо за товар.
## Сериализатор ## Сериализатор
1. **AuthorSerializer:** 1. **GoodsTypeSerializer:**
- `username`: Имя пользователя. - `id` (IntegerField): Идентификатор типа имущества.
- `bio`: Биография пользователя. - `goodsTypeName` (CharField): Название типа имущества.
- `image`: Изображение пользователя. - `author` (SerializerMethodField): Автор типа имущества (сериализатор `AuthorSerializer`).
- `following`: Подписка пользователя (булево значение). - `createdAt` (DateTimeField): Дата и время создания типа имущества.
2. **GoodsTypeSerializer:** - `updatedAt` (DateTimeField): Дата и время последнего обновления типа имущества.
- `id`: Идентификатор типа имущества.
- `goodsTypeName`: Название типа имущества.
- `author`: Автор типа имущества (сериализатор `AuthorSerializer`).
- `createdAt`: Дата и время создания типа имущества.
- `updatedAt`: Дата и время последнего обновления типа имущества.
3. **ConsumableTypeSerializer:**
- `id`: Идентификатор типа расходуемых ТМЦ.
- `consumableTypeName`: Название типа расходуемых ТМЦ.
- `author`: Автор типа расходуемых ТМЦ (сериализатор `AuthorSerializer`).
- `createdAt`: Дата и время создания типа расходуемых ТМЦ.
- `updatedAt`: Дата и время последнего обновления типа расходуемых ТМЦ.
4. **GoodsSerializer:**
- `id`: Идентификатор имущества.
- `goods_type`: Тип имущества.
- `goodsName`: Название имущества.
- `goodsInventoryNumber`: Инвентарный номер имущества.
- `goodsDescription`: Описание имущества.
- `goodsPhoto`: Фотография имущества.
- `goodsConditionDescription`: Описание состояния имущества.
- `goodsDamageDateTime`: Дата и время обнаружения повреждения имущества.
- `goodsRelatedObject`: Объект, к которому относится имущество.
- `goodsResponsiblePerson`: Ответственное лицо за имущество.
- `goodsStatus`: Статус имущества.
- `author`: Автор имущества (сериализатор `AuthorSerializer`).
- `createdAt`: Дата и время создания имущества.
- `updatedAt`: Дата и время последнего обновления имущества.
5. **ConsumableSerializer:**
- `id`: Идентификатор расходуемого товара.
- `consumable_type`: Тип расходуемого товара.
- `consumableName`: Название расходуемого товара.
- `consumableDescription`: Описание расходуемого товара.
- `consumablePhoto`: Фотография расходуемого товара.
- `consumableQuantity`: Количество расходуемого товара.
- `consumableQuantityUnit`: Единица измерения количества товара.
- `consumableRelatedObject`: Объект, к которому относится товар.
- `consumableResponsiblePerson`: Ответственное лицо за товар.
- `author`: Автор расходуемого товара (сериализатор `AuthorSerializer`).
- `createdAt`: Дата и время создания расходуемого товара.
- `updatedAt`: Дата и время последнего обновления расходуемого товара.
2. **ConsumableTypeSerializer:**
- `id` (IntegerField): Идентификатор типа расходуемых ТМЦ.
- `consumableTypeName` (CharField): Название типа расходуемых ТМЦ.
- `author` (SerializerMethodField): Автор типа расходуемых ТМЦ (сериализатор `AuthorSerializer`).
- `createdAt` (DateTimeField): Дата и время создания типа расходуемых ТМЦ.
- `updatedAt` (DateTimeField): Дата и время последнего обновления типа расходуемых ТМЦ.
3. **GoodsSerializer:**
- `id` (IntegerField): Идентификатор имущества.
- `goods_type` (GoodsTypeSerializer): Тип имущества.
- `goodsName` (CharField): Название имущества.
- `goodsInventoryNumber` (CharField): Инвентарный номер имущества.
- `goodsDescription` (TextField): Описание имущества.
- `goodsPhoto` (ManyToManyField): Фотография имущества.
- `goodsConditionDescription` (TextField): Описание состояния имущества.
- `goodsDamageDateTime` (DateTimeField): Дата и время обнаружения повреждения имущества.
- `goodsRelatedObject` (ForeignKey): Объект, к которому относится имущество.
- `goodsResponsiblePerson` (CharField): Ответственное лицо за имущество.
- `goodsStatus` (CharField): Статус имущества.
- `author` (SerializerMethodField): Автор имущества (сериализатор `AuthorSerializer`).
- `createdAt` (DateTimeField): Дата и время создания имущества.
- `updatedAt` (DateTimeField): Дата и время последнего обновления имущества.
4. **ConsumableSerializer:**
- `id` (IntegerField): Идентификатор расходуемого товара.
- `consumable_type` (ConsumableTypeSerializer): Тип расходуемого товара.
- `consumableName` (CharField): Название расходуемого товара.
- `consumableDescription` (TextField): Описание расходуемого товара.
- `consumablePhoto` (ManyToManyField): Фотография расходуемого товара.
- `consumableQuantity` (PositiveIntegerField): Количество расходуемого товара.
- `consumableQuantityUnit` (CharField): Единица измерения количества товара.
- `consumableRelatedObject` (ForeignKey): Объект, к которому относится товар.
- `consumableResponsiblePerson` (CharField): Ответственное лицо за товар.
- `author` (SerializerMethodField): Автор расходуемого товара (сериализатор `AuthorSerializer`).
- `createdAt` (DateTimeField): Дата и время создания расходуемого товара.
- `updatedAt` (DateTimeField): Дата и время последнего обновления расходуемого товара.
## Маршрутизатор ## Маршрутизатор
1. `router.register('goods', GoodsView, basename='goods')`: Регистрация представления `GoodsView` в маршрутизаторе под именем `'goods'`, с указанием базового имени `'goods'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) имущества. 1. `router.register('goods', GoodsView, basename='goods')`: Регистрация представления `GoodsView` в маршрутизаторе под именем `'goods'`, с указанием базового имени `'goods'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) имущества.
@@ -86,30 +86,33 @@
1. **GoodsView:** 1. **GoodsView:**
- **Описание:** Это представление, использующее `ModelViewSet`, обрабатывает операции CRUD для имущества. - **Описание:** Это представление, использующее `ModelViewSet`, обрабатывает операции CRUD для имущества.
- **Методы:** - **Методы:**
- **list:** Возвращает список имущества. - **`list`:** Возвращает список имущества.
- **create:** Создает новое имущество. - **`create`:** Создает новое имущество.
- **retrieve:** Возвращает конкретное имущество по его идентификатору. - **`retrieve`:** Возвращает конкретное имущество по его идентификатору.
- **update:** Обновляет существующее имущество. - **`update`:** Обновляет существующее имущество.
- **destroy:** Удаляет имущество. - **`destroy`:** Удаляет имущество.
- **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам. - **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам.
2. **GoodsTypeView:** 2. **GoodsTypeView:**
- **Описание:** Это представление, также использующее `ModelViewSet`, для операций CRUD с типами имущества. - **Описание:** Это представление, также использующее `ModelViewSet`, для операций CRUD с типами имущества.
- **Методы:** - **Методы:**
- **list:** Возвращает список типов имущества. - **`list`:** Возвращает список типов имущества.
- **create:** Создает новый тип имущества. - **`create`:** Создает новый тип имущества.
- **destroy:** Удаляет тип имущества. - `**destroy`:** Удаляет тип имущества.
- **Права доступа:** Только аутентифицированные пользователи могут выполнять действия с типами имущества. - **Права доступа:** Только аутентифицированные пользователи могут выполнять действия с типами имущества.
3. **ConsumableTypeView:** 3. **ConsumableTypeView:**
- **Описание:** Представление для операций CRUD с типами расходуемых товаров. - **Описание:** Представление для операций CRUD с типами расходуемых товаров.
- **Методы:** - **Методы:**
- **list:** Возвращает список типов расходуемых товаров. - **`list`:** Возвращает список типов расходуемых товаров.
- **create:** Создает новый тип расходуемого товара. - `**create`:** Создает новый тип расходуемого товара.
- **destroy:** Удаляет тип расходуемого товара. - **`destroy`:** Удаляет тип расходуемого товара.
- **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам. - **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам.
4. **ConsumableView:** 4. **ConsumableView:**
- **Описание:** Представление для операций CRUD с расходуемыми товарами. - **Описание:** Представление для операций CRUD с расходуемыми товарами.
- **Методы:** - **Методы:**
- **list:** Возвращает список расходуемых товаров. - **`list`:** Возвращает список расходуемых товаров.
- **create:** Создает новый расходуемый товар. - **`create`:** Создает новый расходуемый товар.
- **destroy:** Удаляет расходуемый товар. - **`destroy`:** Удаляет расходуемый товар.
- **Права доступа:** Только аутентифицированные пользователи могут управлять расходуемыми товарами. - **Права доступа:** Только аутентифицированные пользователи могут управлять расходуемыми товарами.

View File

@@ -1,27 +1,31 @@
## Модель ## Модель
1. **TimeStampedModel:** 1. **MaintenanceHistory:**
- **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта. - **`object`** (ForeignKey): Связь с объектом, к которому относится история обслуживания.
- **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта. - **`start_time`** (DateTimeField): Дата начала обслуживания.
- **author:** ForeignKey, связывает с моделью пользователя, который создал объект. - **`end_time`** (DateTimeField): Дата окончания обслуживания (может быть пустым).
2. **MaintenanceHistory:** - **`maintenance_text`** (TextField): Текстовое описание обслуживания.
- **object:** ForeignKey, связь с объектом, к которому относится история обслуживания. - **`photo_history_maintenance`** (ManyToManyField): Связь с фотографиями отчета об обслуживании.
- **start_time:** DateTimeField, дата начала обслуживания.
- **end_time:** DateTimeField, дата окончания обслуживания (может быть пустым). 2. **TechnicalWorkHistory:**
- **maintenance_text:** TextField, текстовое описание обслуживания. - **`object`** (ForeignKey): Связь с объектом, к которому относится история технических работ.
- **photo_history_maintenance:** ManyToManyField, связь с фотографиями отчета об обслуживании. - **`start_date`** (DateField): Дата начала технических работ.
3. **TechnicalWorkHistory:** - **`end_date`** (DateField): Дата окончания технических работ.
- **object:** ForeignKey, связь с объектом, к которому относится история технических работ. - **`description`** (TextField): Описание выполненных работ.
- **start_date:** DateField, дата начала технических работ. - **`photo_history_technical_work`** (ManyToManyField): Связь с фотографиями отчета о технических работах.
- **end_date:** DateField, дата окончания технических работ.
- **description:** TextField, описание выполненных работ. 3. **MeteringDevice:**
- **photo_history_technical_work:** ManyToManyField, связь с фотографиями отчета о технических работах. - **`object`** (ForeignKey): Связь с объектом, к которому относится история технических работ.
4. **MeteringDevice:** - **`start_time`** (DateTimeField): дата начала обслуживания прибора учета.
- **object:** ForeignKey, связь с объектом, к которому относится прибор учета. - **`end_time`** (DateTimeField): дата окончания обслуживания прибора учета (может быть пустым).
- **start_time:** DateTimeField, дата начала обслуживания прибора учета. - **`maintenance_text`** (TextField): Текстовое описание проведенного обслуживания прибора учета. Здесь можно указать основные детали и результаты работ.
- **end_time:** DateTimeField, дата окончания обслуживания прибора учета (может быть пустым). - **`electricity_reading`** (FloatField): Показание по электроэнергии, которое фиксируется при обслуживании прибора учета электроэнергии.
- **maintenance_text:** TextField, текстовое описание обслуживания прибора учета. - **`water_reading`** (FloatField): Показание по воде, которое фиксируется при обслуживании прибора учета потребления воды.
- **[показания по различным видам учета]:** FloatField, поля для хранения показаний по различным видам учета. - **`security_reading`** (FloatField): Показание по охране, которое фиксируется при обслуживании прибора учета системы безопасности.
- **photo_history_metering_device:** ManyToManyField, связь с фотографиями показаний прибора учета. - **`internet_reading`** (FloatField): Показание по интернету, которое фиксируется при обслуживании прибора учета интернет-трафика.
- **`gas_reading`** (FloatField): Показание по газу, которое фиксируется при обслуживании прибора учета газа.
- **`garbage_disposal_reading`** (FloatField): Показание по вывозу мусора, которое фиксируется при обслуживании прибора учета мусора.
- **`capital_repairs_reading`** (FloatField): Показание по капитальным ремонтам, которое фиксируется при обслуживании прибора учета капитальных ремонтов.
- **`photo_history_metering_device`** (ManyToManyField): Связь с фотографиями показаний прибора учета. Здесь можно хранить изображения или документацию о показаниях прибора учета.
## Сериализатор ## Сериализатор
## Маршрутизатор ## Маршрутизатор

View File

@@ -1,29 +1,26 @@
## Модель статьи ## Модель статьи
1. **TimeStampedModel:** 1. **TimeStampedModel:**
- Абстрактная базовая модель для добавления автора, полей времени создания и изменения к другим моделям. Добавлены поля к стандартному набору модели.
- `created_at`: Дата и время создания объекта. - **`file_name`** (CharField): Имя файла объекта.
- `updated_at`: Дата и время последнего обновления объекта. - **Метод `save`**: Переопределен для автоматической установки даты создания и обновления.
- `author`: Автор объекта. - **Метод `generate_file_url`**: Генерирует URL файла.
- `file_name`: Имя файла объекта.
- Метод `save`: Переопределен для автоматической установки даты создания и обновления.
- Метод `generate_file_url`: Генерирует URL файла.
2. **Images:**
- Модель файлов изображений.
- `file`: Поле для загрузки изображения.
- `history`: Поле для хранения истории изменений.
- Метод `save`: Дополнительно устанавливает имя файла с префиксом "Image_".
- Метод `clean`: Проверяет допустимость формата изображения.
3. **Videos:**
- Модель файлов видео.
- `file`: Поле для загрузки видео.
- `history`: Поле для хранения истории изменений.
- Метод `save`: Дополнительно устанавливает имя файла с префиксом "Video_".
4. **OtherFiles:**
- Модель файлов всех типов документов.
- `file`: Поле для загрузки документа.
- `history`: Поле для хранения истории изменений.
- Метод `save`: Дополнительно устанавливает имя файла с префиксом "Document_".
2. **Images:**
- Модель для файлов изображений.
- **`file`** (ImageField): Поле для загрузки изображения.
- **`history`** (HistoricalRecords): Поле для хранения истории изменений.
- **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Image_".
3. **Videos:**
- Модель для файлов видео.
- **`file`** (FileField): Поле для загрузки видео.
- **`history`** (HistoricalRecords): Поле для хранения истории изменений.
- **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Video_".
4. **OtherFiles:**
- **`file`** (FileField): Поле для загрузки видео.
- **`history`** (HistoricalRecords): Поле для хранения истории изменений.
- **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Document_".
## Валидатор данных ## Валидатор данных
1. **validate_max_file_size:** 1. **validate_max_file_size:**

View File

@@ -51,71 +51,79 @@
- Имеет поля времени создания и обновления. - Имеет поля времени создания и обновления.
## Сериализатор ## Сериализатор
1. **ObjectTypeNewSerializer** 1. **ObjectTypeNewSerializer**
- objectType (CharField): Строковое представление типа объекта. - `objectType` (CharField): Строковое представление типа объекта.
- nameObjectType (CharField): Название типа объекта. - `nameObjectType` (CharField): Название типа объекта.
- author (AuthorSerializer): Сериализатор для автора объекта. - `author` (AuthorSerializer): Сериализатор для автора объекта.
- createdAt (DateTimeField): Дата и время создания объекта. - `createdAt` (DateTimeField): Дата и время создания объекта.
- updatedAt (DateTimeField): Дата и время последнего обновления объекта. - `updatedAt` (DateTimeField): Дата и время последнего обновления объекта.
2. **PurposePremisesSerializer** 2. **PurposePremisesSerializer**
- namePurposePremises (CharField): Название назначения помещения. - `namePurposePremises` (CharField): Название назначения помещения.
- author (AuthorSerializer): Сериализатор для автора назначения помещения. - `author` (AuthorSerializer): Сериализатор для автора назначения помещения.
- createdAt (DateTimeField): Дата и время создания назначения помещения. - `createdAt` (DateTimeField): Дата и время создания назначения помещения.
- updatedAt (DateTimeField): Дата и время последнего обновления назначения помещения. - `updatedAt` (DateTimeField): Дата и время последнего обновления назначения помещения.
3. **RoomSerializer** 3. **RoomSerializer**
- roomNumber (CharField): Номер помещения. - `roomNumber` (CharField): Номер помещения.
- roomEntrance (CharField): Вход помещения. - `roomEntrance` (CharField): Вход помещения.
- roomArea (CharField): Площадь помещения. - `roomArea` (CharField): Площадь помещения.
- author (AuthorSerializer): Сериализатор для автора помещения. - `author` (AuthorSerializer): Сериализатор для автора помещения.
- createdAt (DateTimeField): Дата и время создания помещения. - `createdAt` (DateTimeField): Дата и время создания помещения.
- updatedAt (DateTimeField): Дата и время последнего обновления помещения. - `updatedAt` (DateTimeField): Дата и время последнего обновления помещения.
4. **FloorSerializer** 4. **FloorSerializer**
- floorNumber (IntegerField): Номер этажа. - `floorNumber` (IntegerField): Номер этажа.
- floor_plan_image (ImagePropirtiesFloorPlanSerializer): Сериализатор для изображений плана этажа. - `floor_plan_image` (ImagePropirtiesFloorPlanSerializer): Сериализатор для изображений плана этажа.
- author (AuthorSerializer): Сериализатор для автора этажа. - `author` (AuthorSerializer): Сериализатор для автора этажа.
- createdAt (DateTimeField): Дата и время создания этажа. - `createdAt` (DateTimeField): Дата и время создания этажа.
- updatedAt (DateTimeField): Дата и время последнего обновления этажа. - `updatedAt` (DateTimeField): Дата и время последнего обновления этажа.
5. **EntranceSerializer** 5. **EntranceSerializer**
- entranceNumber (IntegerField): Номер подъезда. - `entranceNumber` (IntegerField): Номер подъезда.
- entrancePlanImage (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда. - `entrancePlanImage` (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда.
- author (AuthorSerializer): Сериализатор для автора подъезда. - `author` (AuthorSerializer): Сериализатор для автора подъезда.
- createdAt (DateTimeField): Дата и время создания подъезда. - `createdAt` (DateTimeField): Дата и время создания подъезда.
- updatedAt (DateTimeField): Дата и время последнего обновления подъезда. - `updatedAt` (DateTimeField): Дата и время последнего обновления подъезда.
6. **BuildingSerializer** 6. **BuildingSerializer**
- nombeBuilding (CharField): Номер здания. - `nombeBuilding` (CharField): Номер здания.
- buildingName (CharField): Название здания. - `buildingName` (CharField): Название здания.
- yearBuilt (CharField): Год постройки здания. - `yearBuilt` (CharField): Год постройки здания.
- author (AuthorSerializer): Сериализатор для автора здания. - `author` (AuthorSerializer): Сериализатор для автора здания.
- createdAt (DateTimeField): Дата и время создания здания. - `createdAt` (DateTimeField): Дата и время создания здания.
- updatedAt (DateTimeField): Дата и время последнего обновления здания. - `updatedAt` (DateTimeField): Дата и время последнего обновления здания.
7. **TerritorySerializer** 7. **TerritorySerializer**
- territoryDistrict (CharField): Район территории. - `territoryDistrict` (CharField): Район территории.
- territoryMicrodistrict (CharField): Микрорайон территории. - `territoryMicrodistrict` (CharField): Микрорайон территории.
- author (AuthorSerializer): Сериализатор для автора территории. - `author` (AuthorSerializer): Сериализатор для автора территории.
- createdAt (DateTimeField): Дата и время создания территории. - `createdAt` (DateTimeField): Дата и время создания территории.
- updatedAt (DateTimeField): Дата и время последнего обновления территории. - `updatedAt` (DateTimeField): Дата и время последнего обновления территории.
8. **ClusterSerializer** 8. **ClusterSerializer**
- clusterRegion (CharField): Регион кластера. - `clusterRegion` (CharField): Регион кластера.
- clusterCity (CharField): Город кластера. - `clusterCity` (CharField): Город кластера.
- author (AuthorSerializer): Сериализатор для автора кластера. - `author` (AuthorSerializer): Сериализатор для автора кластера.
- createdAt (DateTimeField): Дата и время создания кластера. - `createdAt` (DateTimeField): Дата и время создания кластера.
- updatedAt (DateTimeField): Дата и время последнего обновления кластера. - `updatedAt` (DateTimeField): Дата и время последнего обновления кластера.
9. **ObjectSerializer** 9. **ObjectSerializer**
- objectAddress (CharField): Адрес объекта. - `objectAddress` (CharField): Адрес объекта.
- cadastreNumber (CharField): Кадастровый номер объекта. - `cadastreNumber` (CharField): Кадастровый номер объекта.
- purposePremises (CharField): Назначение помещения объекта. - `purposePremises` (CharField): Назначение помещения объекта.
- technicalFeatures (CharField): Технические особенности объекта. - `technicalFeatures` (CharField): Технические особенности объекта.
- objectFiles (FileField): Файлы, связанные с объектом. - `objectFiles` (FileField): Файлы, связанные с объектом.
- objectImages (ImageField): Изображения объекта. - `objectImages` (ImageField): Изображения объекта.
- objectVideos (FileField): Видео, связанные с объектом. - `objectVideos` (FileField): Видео, связанные с объектом.
- room (PrimaryKeyRelatedField): Связанные помещения объекта. - `room` (PrimaryKeyRelatedField): Связанные помещения объекта.
- floor (PrimaryKeyRelatedField): Связанные этажи объекта. - `floor` (PrimaryKeyRelatedField): Связанные этажи объекта.
- entrance (PrimaryKeyRelatedField): Связанные подъезды объекта. - `entrance` (PrimaryKeyRelatedField): Связанные подъезды объекта.
- building (PrimaryKeyRelatedField): Связанные здания объекта. - `building` (PrimaryKeyRelatedField): Связанные здания объекта.
- territory (PrimaryKeyRelatedField): Связанные территории объекта. - `territory` (PrimaryKeyRelatedField): Связанные территории объекта.
- cluster (PrimaryKeyRelatedField): Связанные кластеры объекта. - `cluster` (PrimaryKeyRelatedField): Связанные кластеры объекта.
- author (AuthorSerializer): Сериализатор для автора объекта. - `author` (AuthorSerializer): Сериализатор для автора объекта.
- createdAt (DateTimeField): Дата и время создания объекта. - `createdAt` (DateTimeField): Дата и время создания объекта.
- updatedAt (DateTimeField): Дата и время последнего обновления объекта. - `updatedAt` (DateTimeField): Дата и время последнего обновления объекта.
## Маршрутизатор ## Маршрутизатор
1. **properties-objecttypenew/** - URL для работы с типами объектов: 1. **properties-objecttypenew/** - URL для работы с типами объектов:
@@ -154,48 +162,56 @@
- `retrieve`: Получает конкретный тип объекта по его идентификатору. - `retrieve`: Получает конкретный тип объекта по его идентификатору.
- `update`: Обновляет данные о типе объекта. - `update`: Обновляет данные о типе объекта.
- `destroy`: Удаляет тип объекта. - `destroy`: Удаляет тип объекта.
2. **PurposePremisesViewSet**: 2. **PurposePremisesViewSet**:
- `list`: Получает список всех назначений помещений или создает новое назначение помещения. - `list`: Получает список всех назначений помещений или создает новое назначение помещения.
- `create`: Создает новое назначение помещения. - `create`: Создает новое назначение помещения.
- `retrieve`: Получает конкретное назначение помещения по его идентификатору. - `retrieve`: Получает конкретное назначение помещения по его идентификатору.
- `update`: Обновляет данные о назначении помещения. - `update`: Обновляет данные о назначении помещения.
- `destroy`: Удаляет назначение помещения. - `destroy`: Удаляет назначение помещения.
3. **RoomViewSet**: 3. **RoomViewSet**:
- `list`: Получает список всех помещений или создает новое помещение. - `list`: Получает список всех помещений или создает новое помещение.
- `create`: Создает новое помещение. - `create`: Создает новое помещение.
- `retrieve`: Получает конкретное помещение по его идентификатору. - `retrieve`: Получает конкретное помещение по его идентификатору.
- `update`: Обновляет данные о помещении. - `update`: Обновляет данные о помещении.
- `destroy`: Удаляет помещение. - `destroy`: Удаляет помещение.
4. **FloorViewSet**: 4. **FloorViewSet**:
- `list`: Получает список всех этажей или создает новый этаж. - `list`: Получает список всех этажей или создает новый этаж.
- `create`: Создает новый этаж. - `create`: Создает новый этаж.
- `retrieve`: Получает конкретный этаж по его идентификатору. - `retrieve`: Получает конкретный этаж по его идентификатору.
- `update`: Обновляет данные об этаже. - `update`: Обновляет данные об этаже.
- `destroy`: Удаляет этаж. - `destroy`: Удаляет этаж.
5. **EntranceViewSet**: 5. **EntranceViewSet**:
- `list`: Получает список всех подъездов или создает новый подъезд. - `list`: Получает список всех подъездов или создает новый подъезд.
- `create`: Создает новый подъезд. - `create`: Создает новый подъезд.
- `retrieve`: Получает конкретный подъезд по его идентификатору. - `retrieve`: Получает конкретный подъезд по его идентификатору.
- `update`: Обновляет данные о подъезде. - `update`: Обновляет данные о подъезде.
- `destroy`: Удаляет подъезд. - `destroy`: Удаляет подъезд.
6. **BuildingViewSet**: 6. **BuildingViewSet**:
- `list`: Получает список всех зданий или создает новое здание. - `list`: Получает список всех зданий или создает новое здание.
- `create`: Создает новое здание. - `create`: Создает новое здание.
- `retrieve`: Получает конкретное здание по его идентификатору. - `retrieve`: Получает конкретное здание по его идентификатору.
- `update`: Обновляет данные о здании. - `update`: Обновляет данные о здании.
- `destroy`: Удаляет здание. - `destroy`: Удаляет здание.
7. **TerritoryViewSet**: 7. **TerritoryViewSet**:
- `list`: Получает список всех территорий или создает новую территорию. - `list`: Получает список всех территорий или создает новую территорию.
- `create`: Создает новую территорию. - `create`: Создает новую территорию.
- `retrieve`: Получает конкретную территорию по ее идентификатору. - `retrieve`: Получает конкретную территорию по ее идентификатору.
- `update`: Обновляет данные о территории. - `update`: Обновляет данные о территории.
- `destroy`: Удаляет территорию. - `destroy`: Удаляет территорию.
8. **ClusterViewSet**: 8. **ClusterViewSet**:
- `list`: Получает список всех кластеров или создает новый кластер. - `list`: Получает список всех кластеров или создает новый кластер.
- `create`: Создает новый кластер. - `create`: Создает новый кластер.
- `retrieve`: Получает конкретный кластер по его идентификатору. - `retrieve`: Получает конкретный кластер по его идентификатору.
- `update`: Обновляет данные о кластере. - `update`: Обновляет данные о кластере.
- `destroy`: Удаляет кластер. - `destroy`: Удаляет кластер.
9. **ObjectViewSet**: 9. **ObjectViewSet**:
- `list`: Получает список всех объектов или создает новый объект. - `list`: Получает список всех объектов или создает новый объект.
- `create`: Создает новый объект. - `create`: Создает новый объект.
@@ -203,10 +219,12 @@
- `update`: Обновляет данные об объекте. - `update`: Обновляет данные об объекте.
- `destroy`: Удаляет объект. - `destroy`: Удаляет объект.
## Проверка введенных данных ## Проверка введенных данных
1. **validate_year(value)**: 1. **validate_year(value)**:
- Это функция-валидатор, которая принимает значение года в виде строки. - Это функция-валидатор, которая принимает значение года в виде строки.
- Она проверяет, что длина значения равна 4 символам и что значение состоит только из цифр. - Она проверяет, что длина значения равна 4 символам и что значение состоит только из цифр.
- Если условия не соблюдаются, функция поднимает исключение ValidationError с соответствующим сообщением об ошибке. - Если условия не соблюдаются, функция поднимает исключение ValidationError с соответствующим сообщением об ошибке.
2. **YearField(models.CharField)**: 2. **YearField(models.CharField)**:
- Это класс, который определяет поле модели Django для хранения года. - Это класс, который определяет поле модели Django для хранения года.
- Он наследуется от CharField и добавляет к нему функциональность валидации года. - Он наследуется от CharField и добавляет к нему функциональность валидации года.

View File

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

View File

@@ -1,10 +1,3 @@
## Абстрактный класс `TimeStampedModel`:
Этот класс добавляет автоматические поля времени создания (`created_at`), времени обновления (`updated_at`) и ссылку на автора (`author`) ко всем моделям, которые наследуют его.
1. `created_at` (DateTimeField): Дата и время создания объекта.
2. `updated_at` (DateTimeField): Дата и время последнего обновления объекта.
3. `author` (ForeignKey): Ссылка на пользователя, создавшего объект.
## Кортеж типа организации ## Кортеж типа организации
INDIVIDUAL = 'individual' INDIVIDUAL = 'individual'
LEGAL_ENTITY = 'legal_entity' LEGAL_ENTITY = 'legal_entity'
@@ -53,24 +46,40 @@ ORGANIZATION_SUBTYPE_CHOICES = (
## Сериализатор ## Сериализатор
1. **TenantSerializer**: 1. **TenantSerializer**:
- `tenantType`: Поле, которое отображает тип арендатора. - `tenantType` (CharField): Тип арендатора.
- `organizationType`: Поле, которое отображает тип организации (юридического лица). - `organizationType` (CharField): Тип организации (юридического лица).
- `tradeName`: Название арендуемой организацией единицы недвижимости. - `tradeName` (CharField): Название арендуемой организацией единицы недвижимости.
- `tenantName`, `tenantSurname`, `tenantPatronymic`: Имя, фамилия и отчество арендатора (физического лица). - `tenantName` (CharField): Имя арендатора (физического лица).
- `tenantPassportSeries`, `tenantPassportNumber`, `tenantPassportIssuedBy`, `tenantPassportIssuedDate`: Серия и номер паспорта, кем выдан и дата выдачи (физического лица). - `tenantSurname` (CharField): Фамилия арендатора (физического лица).
- `tenantRegistration`: Прописка арендатора (физического лица) или дополнительная информация (юридического лица). - `tenantPatronymic` (CharField): Отчество арендатора (физического лица).
- `tenantCompanyName`, `tenantInn`, `KPP`, `tenantOgrn`, `bankDetails`: Название организации, ИНН, КПП, ОГРН и реквизиты банка (юридического лица). - `tenantPassportSeries` (CharField): Серия паспорта арендатора (физического лица).
- `additionalInfo`: Дополнительная информация о арендаторе. - `tenantPassportNumber` (CharField): Номер паспорта арендатора (физического лица).
- `tenantFile`: Скан документов арендатора. - `tenantPassportIssuedBy` (CharField): Кем выдан паспорт арендатора (физического лица).
- `author`: Информация об авторе (сериализатор `AuthorSerializer`). - `tenantPassportIssuedDate` (DateField): Дата выдачи паспорта арендатора (физического лица).
- `createdAt`, `updatedAt`: Дата создания и обновления записи. - `tenantRegistration` (TextField): Прописка арендатора (физического лица) или дополнительная информация (юридического лица).
1. **ContactSerializer**: - `tenantCompanyName` (CharField): Название организации арендатора (юридического лица).
- `contactTypeTenant`: Тип контакта. - `tenantInn` (CharField): ИНН организации арендатора (юридического лица).
- `attitudeContactTypeTenant`: Атрибут контакта. - `KPP` (CharField): КПП организации арендатора (юридического лица).
- `valueTenant`: Значение контакта. - `tenantOgrn` (CharField): ОГРН организации арендатора (юридического лица).
- `firstNameTenant`, `lastNameTenant`, `organizationTenant`, `jobTitleTenant`, `addressTenant`: Имя, фамилия, организация, должность и адрес (контактные данные арендатора). - `bankDetails` (CharField): Реквизиты банка организации арендатора (юридического лица).
- `author`: Информация об авторе (сериализатор `AuthorSerializer`). - `additionalInfo` (TextField): Дополнительная информация о арендаторе.
- `createdAt`, `updatedAt`: Дата создания и обновления записи. - `tenantFile` (FileField): Скан документов арендатора.
- `author` (AuthorSerializer): Информация об авторе.
- `createdAt` (DateTimeField): Дата создания записи.
- `updatedAt` (DateTimeField): Дата обновления записи.
2. **ContactSerializer**:
- `contactTypeTenant` (CharField): Тип контакта арендатора.
- `attitudeContactTypeTenant` (CharField): Атрибут контакта арендатора.
- `valueTenant` (CharField): Значение контакта арендатора.
- `firstNameTenant` (CharField): Имя арендатора (физического лица).
- `lastNameTenant` (CharField): Фамилия арендатора (физического лица).
- `organizationTenant` (CharField): Название организации арендатора (юридического лица).
- `jobTitleTenant` (CharField): Должность арендатора (юридического лица).
- `addressTenant` (CharField): Адрес арендатора.
- `author` (AuthorSerializer): Информация об авторе.
- `createdAt` (DateTimeField): Дата создания записи.
- `updatedAt` (DateTimeField): Дата обновления записи.
## Маршрутизатор ## Маршрутизатор
@@ -91,20 +100,24 @@ ORGANIZATION_SUBTYPE_CHOICES = (
- `lookup_field`: Поле, используемое для поиска объектов `Tenant`. - `lookup_field`: Поле, используемое для поиска объектов `Tenant`.
- `filterset_class`: Фильтры для списка арендаторов. - `filterset_class`: Фильтры для списка арендаторов.
- `http_method_names`: Определяет доступные методы HTTP (GET, POST, PUT, DELETE). - `http_method_names`: Определяет доступные методы HTTP (GET, POST, PUT, DELETE).
2. **Методы TenantView:** 2. **Методы TenantView:**
- `list`: Получает список арендаторов. - `list`: Получает список арендаторов.
- `create`: Создает нового арендатора. - `create`: Создает нового арендатора.
- `retrieve`: Получает детали конкретного арендатора. - `retrieve`: Получает детали конкретного арендатора.
- `update`: Обновляет данные арендатора. - `update`: Обновляет данные арендатора.
- `destroy`: Удаляет арендатора. - `destroy`: Удаляет арендатора.
3. **ContactTenantViewSet:** 3. **ContactTenantViewSet:**
- Представление для работы с контактами арендаторов. - Представление для работы с контактами арендаторов.
- `queryset`: Устанавливает все объекты `Contact` в качестве запроса по умолчанию. - `queryset`: Устанавливает все объекты `Contact` в качестве запроса по умолчанию.
- `serializer_class`: Использует `ContactSerializer` для сериализации и десериализации данных. - `serializer_class`: Использует `ContactSerializer` для сериализации и десериализации данных.
- `permission_classes`: Устанавливает разрешения для доступа к представлениям (в данном случае, только аутентифицированные пользователи). - `permission_classes`: Устанавливает разрешения для доступа к представлениям (в данном случае, только аутентифицированные пользователи).
4. **Методы ContactTenantViewSet:** 4. **Методы ContactTenantViewSet:**
- `list`: Получает список контактов для конкретного арендатора. - `list`: Получает список контактов для конкретного арендатора.
- `post`: Создает новый контакт для арендатора. - `post`: Создает новый контакт для арендатора.
5. **DeleteContactTenantView:** 5. **DeleteContactTenantView:**
- Представление для удаления контакта арендатора. - Представление для удаления контакта арендатора.
- `destroy`: Удаляет контакт. - `destroy`: Удаляет контакт.
@@ -115,6 +128,7 @@ ORGANIZATION_SUBTYPE_CHOICES = (
- Разрешение для проверки доступа к объектам на основе их владельца или участника. - Разрешение для проверки доступа к объектам на основе их владельца или участника.
- `has_object_permission`: Метод, который проверяет разрешение на доступ к конкретному объекту. - `has_object_permission`: Метод, который проверяет разрешение на доступ к конкретному объекту.
- Разрешает доступ только для безопасных методов (GET, HEAD, OPTIONS) или если пользователь является владельцем объекта. - Разрешает доступ только для безопасных методов (GET, HEAD, OPTIONS) или если пользователь является владельцем объекта.
2. **IsOwnerAndAdmin:** 2. **IsOwnerAndAdmin:**
- Разрешение, позволяющее только авторам объектов Tenant и пользователям с группой 'admin' доступ к операциям CRUD. - Разрешение, позволяющее только авторам объектов Tenant и пользователям с группой 'admin' доступ к операциям CRUD.
- `has_permission`: Метод, который проверяет разрешение на доступ к представлению (view), основанное на группе пользователя. - `has_permission`: Метод, который проверяет разрешение на доступ к представлению (view), основанное на группе пользователя.

View File

@@ -1,4 +1,3 @@
# Описание приложения
### Кортежи статуса задачи ### Кортежи статуса задачи
TASK_STATUS = ( TASK_STATUS = (
('New', 'Новая'), ('New', 'Новая'),
@@ -13,51 +12,55 @@ PRIORITY = (
('High', 'Высокий'), ('High', 'Высокий'),
) )
## Модель задачи ## Модель задачи
1. **author** (ForeignKey): Ссылка на пользователя, который создал задачу. 1. **`author`** (ForeignKey): Ссылка на пользователя, который создал задачу.
2. **title** (CharField): Название задачи (до 150 символов). 2. **`title`** (CharField): Название задачи (до 150 символов).
3. **summary** (TextField): Краткое описание задачи. 3. **`summary`** (TextField): Краткое описание задачи.
4. **content** (TextField): Подробное описание задачи. 4. **`content`** (TextField): Подробное описание задачи.
5. **is_active** (BooleanField): Флаг, указывающий на активность задачи. 5. **`is_active`** (BooleanField): Флаг, указывающий на активность задачи.
6. **is_deleted** (BooleanField): Флаг, указывающий на удаление задачи. 6. **`is_deleted`** (BooleanField): Флаг, указывающий на удаление задачи.
7. **priority** (CharField): Приоритет задачи (выбор из предустановленных значений). 7. **`priority`** (CharField): Приоритет задачи (выбор из предустановленных значений).
8. **status** (CharField): Статус задачи (выбор из предустановленных значений). 8. **`status`** (CharField): Статус задачи (выбор из предустановленных значений).
9. **is_complete** (BooleanField): Флаг, указывающий на завершение задачи. 9. **`is_complete`** (BooleanField): Флаг, указывающий на завершение задачи.
10. **start_time** (DateTimeField): Дата и время начала задачи. 10. `**start_time**` (DateTimeField): Дата и время начала задачи.
11. **end_time** (DateTimeField): Крайний срок выполнения задачи. 11. **`end_time`** (DateTimeField): Крайний срок выполнения задачи.
12. **created** (DateTimeField): Время создания задачи (автоматически заполняется при создании). 12. **`created`** (DateTimeField): Время создания задачи (автоматически заполняется при создании).
13. **updated** (DateTimeField): Время последнего обновления задачи (автоматически обновляется при изменениях). 13. **`updated`** (DateTimeField): Время последнего обновления задачи (автоматически обновляется при изменениях).
14. **substacles** (ManyToManyField): Связь между задачами, представляющая подзадачи текущей задачи. 14. **`substacles`** (ManyToManyField): Связь между задачами, представляющая подзадачи текущей задачи.
15. **favorites** (ManyToManyField): Пользователи, которые добавили задачу в избранное. 15. `**favorites**` (ManyToManyField): Пользователи, которые добавили задачу в избранное.
16. **suppliers** (ManyToManyField): Пользователи, ответственные за выполнение задачи. 16. **`suppliers`** (ManyToManyField): Пользователи, ответственные за выполнение задачи.
17. **supporters** (ManyToManyField): Соисполнители задачи. 17. **`supporters`** (ManyToManyField): Соисполнители задачи.
18. **observers** (ManyToManyField): Пользователи, наблюдающие за выполнением задачи. 18. **`observers`** (ManyToManyField): Пользователи, наблюдающие за выполнением задачи.
19. **tags** (TaggableManager): Теги, связанные с задачей для удобной классификации. 19. `**`tags** (TaggableManager): Теги, связанные с задачей для удобной классификации.
## Сериализатор ## Сериализатор
1. **AuthorSerializer**: 1. **TodoSerializer**:
- Сериализатор для пользователя (автора задачи). - `id` (IntegerField): Идентификатор задачи.
- Содержит поля: `username`, `bio`, `image`, `following`. - `title` (CharField): Заголовок задачи.
- Поле `following` определяется методом `get_following`, который проверяет, подписан ли текущий пользователь на автора задачи. - `description` (CharField): Описание задачи.
2. **TodoSerializer**: - `body` (CharField): Текст задачи.
- Основной сериализатор для модели Todo. - `tagList` (ListField): Список тегов задачи.
- Поля: - `is_complete` (BooleanField): Завершена ли задача.
- `id`, `title`, `description`, `body`, `tagList`, `is_complete`, `status`, `priority`, `is_deleted`, `is_active`, `createdAt`, `updatedAt`, `startTimedAt`, `endTimedAt`, `author`, `substacles`, `favorited`, `favoritesCount`, `supplierd`, `suppliersCount`, `supporterd`, `supportersCount`, `observerd`, `observersCount`. - `status` (CharField): Статус задачи.
- Некоторые поля (`description`, `body`, `tagList`, `createdAt`, `updatedAt`, `startTimedAt`, `endTimedAt`, `favorited`, `favoritesCount`, `supplierd`, `suppliersCount`, `supporterd`, `supportersCount`, `observerd`, `observersCount`) имеют методы `get_*`, которые определяют поведение для сериализации. - `priority` (CharField): Приоритет задачи.
- Методы `create` и `update` определяют, как создавать и обновлять объекты Todo. - `is_deleted` (BooleanField): Удалена ли задача.
3. **TagSerializer**: - `is_active` (BooleanField): Активна ли задача.
- Сериализатор для добавления тегов. - `createdAt` (DateTimeField): Дата и время создания задачи.
- Содержит единственное поле `tags`, которое является списком строк. - `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): Количество наблюдателей.
## Маршрутизатор ## Маршрутизатор
```
todo_router = DefaultRouter(trailing_slash=False)
todo_router.register('todos', views.TodoView, basename='todos') todo_router.register('tags', views.TagView)
```
Теперь давайте подробнее разберем каждую часть:
- `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам. - `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('todos', views.TodoView, basename='todos')` регистрирует представление `TodoView` для работы с задачами. Аргументы `basename='todos'` используются для создания имени маршрута, которое будет использоваться в генерации URL (например, `todos-list`, `todos-detail`, `todos-create` `todos-edit` `todos-delete`.).
@@ -71,33 +74,12 @@ todo_router.register('todos', views.TodoView, basename='todos') todo_router.regi
- Использует `ModelViewSet`, который предоставляет CRUD-функциональность и многое другое. - Использует `ModelViewSet`, который предоставляет CRUD-функциональность и многое другое.
- Включает методы `list`, `create`, `retrieve`, `update`, `destroy` для обработки соответствующих HTTP-запросов. - Включает методы `list`, `create`, `retrieve`, `update`, `destroy` для обработки соответствующих HTTP-запросов.
- Содержит дополнительные действия (`favorite`, `feed`) с использованием декоратора `@action`. - Содержит дополнительные действия (`favorite`, `feed`) с использованием декоратора `@action`.
2. **TagView**:
- Представление для работы с тегами.
- Использует `GenericViewSet` и `ListModelMixin` для обработки только GET-запросов.
- Включает метод `list` для получения списка тегов.
```
class TodoView(viewsets.ModelViewSet):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
permission_classes = [CanViewTodoDetail]
lookup_field = 'id'
filterset_class = TodoFilter
http_method_names = ['get', 'post', 'put', 'delete']
```
```
class TagView(viewsets.GenericViewSet, mixins.ListModelMixin):
queryset = Tag.objects.all()
serializer_class = TagSerializer
http_method_names = ['get',]
```
## Права доступа ## Права доступа
1. **IsOwnerOrCollaborator**: 1. **IsOwnerOrCollaborator**:
- Позволяет редактирование задач только владельцу задачи или соисполнителям. - Позволяет редактирование задач только владельцу задачи или соисполнителям.
- Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей. - Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
2. **CanViewTodoDetail**:
1. **CanViewTodoDetail**:
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным. - Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
- Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным. - Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.

View File

@@ -1,5 +1,4 @@
Для начала, установим необходимые библиотеки: Для начала, установим необходимые библиотеки:
``` ```

View File

@@ -1,4 +1,7 @@
## ## Модель ## ## Модель
Этот класс добавляет автоматические поля времени создания (`created_at`), времени обновления (`updated_at`) и ссылку на автора (`author`) ко всем моделям, которые наследуют его.
1. **TimeStampedModel:** 1. **TimeStampedModel:**
- **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта. - **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта.
- **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта. - **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта.
@@ -11,6 +14,7 @@
- `image` (URLField): URL-адрес аватара пользователя. - `image` (URLField): URL-адрес аватара пользователя.
- `following` (SerializerMethodField): Показывает, подписан ли текущий пользователь на пользователя, представленного данным профилем. - `following` (SerializerMethodField): Показывает, подписан ли текущий пользователь на пользователя, представленного данным профилем.
- Метод `get_following`: Возвращает булево значение, указывающее, подписан ли текущий пользователь на пользователя профиля. - Метод `get_following`: Возвращает булево значение, указывающее, подписан ли текущий пользователь на пользователя профиля.
2. **TagSerializer**: 2. **TagSerializer**:
- Сериализатор для добавления тегов. - Сериализатор для добавления тегов.
- Содержит единственное поле `tags`, которое является списком строк. - Содержит единственное поле `tags`, которое является списком строк.
@@ -43,9 +47,19 @@ def favorite(self, request, id=None):
## Маршрутизатор ## Маршрутизатор
- `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам. - `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам.
- **`register('tags', views.TagView)`**: Регистрация маршрута для представления `TagView` из `views.py` под именем 'tags'. - **`register('tags', views.TagView)`**: Регистрация маршрута для представления `TagView` из `views.py` под именем 'tags'.
## Права доступа и разрешения ## Права доступа и разрешения
1. **IsAuthenticated**: Требует, чтобы пользователь был аутентифицирован для доступа к представлениям. 1. **IsAuthenticated**: Требует, чтобы пользователь был аутентифицирован для доступа к представлениям.
2. **IsAuthenticatedOrReadOnly**: Позволяет только чтение неаутентифицированным пользователям. 2. **IsAuthenticatedOrReadOnly**: Позволяет только чтение неаутентифицированным пользователям.
3. **IsOwnerOrCollaborator**:
- Позволяет редактирование задач только владельцу задачи или соисполнителям.
- Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
4. **CanViewTodoDetail**:
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
- Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.

View File

@@ -4,4 +4,4 @@
3. **`export const API_BASE_URL = 'https://fipi.pro/api';`**: Это текущее значение константы `API_BASE_URL`, которое указывает на базовый URL для взаимодействия с вашим API. 3. **`export const API_BASE_URL = 'https://fipi.pro/api';`**: Это текущее значение константы `API_BASE_URL`, которое указывает на базовый URL для взаимодействия с вашим API.
Эти константы могут быть использованы в приложении для обращения к API с помощью Axios или другой библиотеки HTTP. Эти константы могут быть использованы в приложении для обращения к API с помощью Feach или Axios библиотеки HTTP.