## Модель статьи 1. **ObjectTypeNew**: - Представляет типы недвижимости. - `object_type` (CharField): Тип недвижимости (выбор из предустановленных значений). - `name` (CharField): Название подтипа объекта. - Связь с `User` для автора объекта. - Имеет поля времени создания и обновления. 2. **PurposePremises**: - Представляет назначение объектов недвижимости. - `name` (CharField): Название назначения объекта. - Имеет поля времени создания и обновления. 3. **Room**: - Представляет помещение на этаже. - `room_number` (CharField): Номер помещения. - `plan_number` (CharField): Номер на поэтажном плане. - `entrance` (CharField): Тип входа (выбор из предустановленных значений). - `area` (DecimalField): Площадь помещения. - Связь с изображением помещения. - Имеет поля времени создания и обновления. 4. **Floor**: - Представляет этажи в подъезде. - `floor_number` (IntegerField): Номер этажа. - Связь с изображением плана этажа. - Имеет поля времени создания и обновления. 5. **Entrance**: - Представляет подъезды в здании. - `entrance_number` (IntegerField): Номер подъезда. - Связь с изображением плана подъезда. - Имеет поля времени создания и обновления. 6. **Building**: - Представляет здания. - `nomber_building` (CharField): Номер дома. - `building_name` (CharField): Название здания. - `year_built` (YearField): Год постройки здания. - Имеет поля времени создания и обновления. 7. **Territory**: - Представляет территории. - `district` (CharField): Район. - `microdistrict` (CharField): Микрорайон. - Имеет поля времени создания и обновления. 8. **Cluster**: - Представляет кластеры. - `region` (CharField): Регион. - `city` (CharField): Город. - Имеет поля времени создания и обновления. 9. **Object**: - Представляет объект недвижимости. - `address` (CharField): Адрес объекта. - `cadastre_number` (CharField): Кадастровый номер. - Связь с типом объекта, назначением объекта, помещениями, этажами, подъездами, зданиями, территориями, и кластерами. - Имеет поля времени создания и обновления. ## Сериализатор 1. **ObjectTypeNewSerializer** - objectType (CharField): Строковое представление типа объекта. - nameObjectType (CharField): Название типа объекта. - author (AuthorSerializer): Сериализатор для автора объекта. - createdAt (DateTimeField): Дата и время создания объекта. - updatedAt (DateTimeField): Дата и время последнего обновления объекта. 2. **PurposePremisesSerializer** - namePurposePremises (CharField): Название назначения помещения. - author (AuthorSerializer): Сериализатор для автора назначения помещения. - createdAt (DateTimeField): Дата и время создания назначения помещения. - updatedAt (DateTimeField): Дата и время последнего обновления назначения помещения. 3. **RoomSerializer** - roomNumber (CharField): Номер помещения. - roomEntrance (CharField): Вход помещения. - roomArea (CharField): Площадь помещения. - author (AuthorSerializer): Сериализатор для автора помещения. - createdAt (DateTimeField): Дата и время создания помещения. - updatedAt (DateTimeField): Дата и время последнего обновления помещения. 4. **FloorSerializer** - floorNumber (IntegerField): Номер этажа. - floor_plan_image (ImagePropirtiesFloorPlanSerializer): Сериализатор для изображений плана этажа. - author (AuthorSerializer): Сериализатор для автора этажа. - createdAt (DateTimeField): Дата и время создания этажа. - updatedAt (DateTimeField): Дата и время последнего обновления этажа. 5. **EntranceSerializer** - entranceNumber (IntegerField): Номер подъезда. - entrancePlanImage (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда. - author (AuthorSerializer): Сериализатор для автора подъезда. - createdAt (DateTimeField): Дата и время создания подъезда. - updatedAt (DateTimeField): Дата и время последнего обновления подъезда. 6. **BuildingSerializer** - nombeBuilding (CharField): Номер здания. - buildingName (CharField): Название здания. - yearBuilt (CharField): Год постройки здания. - author (AuthorSerializer): Сериализатор для автора здания. - createdAt (DateTimeField): Дата и время создания здания. - updatedAt (DateTimeField): Дата и время последнего обновления здания. 7. **TerritorySerializer** - territoryDistrict (CharField): Район территории. - territoryMicrodistrict (CharField): Микрорайон территории. - author (AuthorSerializer): Сериализатор для автора территории. - createdAt (DateTimeField): Дата и время создания территории. - updatedAt (DateTimeField): Дата и время последнего обновления территории. 8. **ClusterSerializer** - clusterRegion (CharField): Регион кластера. - clusterCity (CharField): Город кластера. - author (AuthorSerializer): Сериализатор для автора кластера. - createdAt (DateTimeField): Дата и время создания кластера. - updatedAt (DateTimeField): Дата и время последнего обновления кластера. 9. **ObjectSerializer** - objectAddress (CharField): Адрес объекта. - cadastreNumber (CharField): Кадастровый номер объекта. - purposePremises (CharField): Назначение помещения объекта. - technicalFeatures (CharField): Технические особенности объекта. - objectFiles (FileField): Файлы, связанные с объектом. - objectImages (ImageField): Изображения объекта. - objectVideos (FileField): Видео, связанные с объектом. - room (PrimaryKeyRelatedField): Связанные помещения объекта. - floor (PrimaryKeyRelatedField): Связанные этажи объекта. - entrance (PrimaryKeyRelatedField): Связанные подъезды объекта. - building (PrimaryKeyRelatedField): Связанные здания объекта. - territory (PrimaryKeyRelatedField): Связанные территории объекта. - cluster (PrimaryKeyRelatedField): Связанные кластеры объекта. - author (AuthorSerializer): Сериализатор для автора объекта. - createdAt (DateTimeField): Дата и время создания объекта. - updatedAt (DateTimeField): Дата и время последнего обновления объекта. ## Маршрутизатор 1. **properties-objecttypenew/** - URL для работы с типами объектов: - GET: Получить список всех типов объектов или создать новый тип объекта. - POST: Создать новый тип объекта. 2. **properties-purposepremises/** - URL для работы с назначениями помещений: - GET: Получить список всех назначений помещений или создать новое назначение помещения. - POST: Создать новое назначение помещения. 3. **properties-room/** - URL для работы с помещениями: - GET: Получить список всех помещений или создать новое помещение. - POST: Создать новое помещение. 4. **properties-floor/** - URL для работы с этажами: - GET: Получить список всех этажей или создать новый этаж. - POST: Создать новый этаж. 5. **properties-entrance/** - URL для работы с подъездами: - GET: Получить список всех подъездов или создать новый подъезд. - POST: Создать новый подъезд. 6. **properties-building/** - URL для работы со зданиями: - GET: Получить список всех зданий или создать новое здание. - POST: Создать новое здание. 7. **properties-territory/** - URL для работы с территориями: - GET: Получить список всех территорий или создать новую территорию. - POST: Создать новую территорию. 8. **properties-cluster/** - URL для работы с кластерами: - GET: Получить список всех кластеров или создать новый кластер. - POST: Создать новый кластер. 9. **properties-object/** - URL для работы с объектами: - GET: Получить список всех объектов или создать новый объект. - POST: Создать новый объект. ## Контроллер 1. **ObjectTypeNewViewSet**: - `list`: Получает список всех типов объектов или создает новый тип объекта. - `create`: Создает новый тип объекта. - `retrieve`: Получает конкретный тип объекта по его идентификатору. - `update`: Обновляет данные о типе объекта. - `destroy`: Удаляет тип объекта. 2. **PurposePremisesViewSet**: - `list`: Получает список всех назначений помещений или создает новое назначение помещения. - `create`: Создает новое назначение помещения. - `retrieve`: Получает конкретное назначение помещения по его идентификатору. - `update`: Обновляет данные о назначении помещения. - `destroy`: Удаляет назначение помещения. 3. **RoomViewSet**: - `list`: Получает список всех помещений или создает новое помещение. - `create`: Создает новое помещение. - `retrieve`: Получает конкретное помещение по его идентификатору. - `update`: Обновляет данные о помещении. - `destroy`: Удаляет помещение. 4. **FloorViewSet**: - `list`: Получает список всех этажей или создает новый этаж. - `create`: Создает новый этаж. - `retrieve`: Получает конкретный этаж по его идентификатору. - `update`: Обновляет данные об этаже. - `destroy`: Удаляет этаж. 5. **EntranceViewSet**: - `list`: Получает список всех подъездов или создает новый подъезд. - `create`: Создает новый подъезд. - `retrieve`: Получает конкретный подъезд по его идентификатору. - `update`: Обновляет данные о подъезде. - `destroy`: Удаляет подъезд. 6. **BuildingViewSet**: - `list`: Получает список всех зданий или создает новое здание. - `create`: Создает новое здание. - `retrieve`: Получает конкретное здание по его идентификатору. - `update`: Обновляет данные о здании. - `destroy`: Удаляет здание. 7. **TerritoryViewSet**: - `list`: Получает список всех территорий или создает новую территорию. - `create`: Создает новую территорию. - `retrieve`: Получает конкретную территорию по ее идентификатору. - `update`: Обновляет данные о территории. - `destroy`: Удаляет территорию. 8. **ClusterViewSet**: - `list`: Получает список всех кластеров или создает новый кластер. - `create`: Создает новый кластер. - `retrieve`: Получает конкретный кластер по его идентификатору. - `update`: Обновляет данные о кластере. - `destroy`: Удаляет кластер. 9. **ObjectViewSet**: - `list`: Получает список всех объектов или создает новый объект. - `create`: Создает новый объект. - `retrieve`: Получает конкретный объект по его идентификатору. - `update`: Обновляет данные об объекте. - `destroy`: Удаляет объект. ## Проверка введенных данных 1. **validate_year(value)**: - Это функция-валидатор, которая принимает значение года в виде строки. - Она проверяет, что длина значения равна 4 символам и что значение состоит только из цифр. - Если условия не соблюдаются, функция поднимает исключение ValidationError с соответствующим сообщением об ошибке. 2. **YearField(models.CharField)**: - Это класс, который определяет поле модели Django для хранения года. - Он наследуется от CharField и добавляет к нему функциональность валидации года. - В конструкторе класса YearField устанавливаются максимальная длина поля в 4 символа и добавляется список валидаторов, включая validate_year.