## Модель статьи 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.