From 799b5e5cf1054be470d8cc8788f970ad0168e1a1 Mon Sep 17 00:00:00 2001 From: Husanjonazamov Date: Fri, 13 Feb 2026 17:43:04 +0500 Subject: [PATCH] RealEstateEvaluationModel modeli qoshildi (Ko'chmas mulk (Real Estate) baholash modeli uchun quyidagicha nomlarni tavsiya qilaman: ) --- core/apps/evaluation/admin/__init__.py | 1 + core/apps/evaluation/admin/real_estate.py | 12 +++ core/apps/evaluation/choices/real_estate.py | 18 ++++ core/apps/evaluation/filters/__init__.py | 1 + core/apps/evaluation/filters/real_estate.py | 13 +++ core/apps/evaluation/forms/__init__.py | 1 + core/apps/evaluation/forms/real_estate.py | 10 ++ .../0005_realestateevaluationmodel.py | 39 +++++++ core/apps/evaluation/models/__init__.py | 4 +- core/apps/evaluation/models/real_estate.py | 68 ++++++++++++ core/apps/evaluation/permissions/__init__.py | 1 + .../evaluation/permissions/real_estate.py | 12 +++ core/apps/evaluation/serializers/__init__.py | 1 + .../serializers/auto/AutoEvaluation.py | 2 + .../real_estate/RealEstateEvaluation.py | 50 +++++++++ .../serializers/real_estate/__init__.py | 1 + core/apps/evaluation/signals/__init__.py | 1 + core/apps/evaluation/signals/real_estate.py | 8 ++ core/apps/evaluation/tests/__init__.py | 1 + .../evaluation/tests/real_estate/__init__.py | 1 + .../real_estate/test_RealEstateEvaluation.py | 101 ++++++++++++++++++ .../tests/valuation/test_Valuation.py | 6 +- .../evaluation/tests/vehicle/test_Vehicle.py | 6 +- core/apps/evaluation/translation/__init__.py | 1 + .../evaluation/translation/real_estate.py | 8 ++ core/apps/evaluation/urls.py | 14 ++- core/apps/evaluation/validators/__init__.py | 1 + .../apps/evaluation/validators/real_estate.py | 8 ++ core/apps/evaluation/views/__init__.py | 1 + core/apps/evaluation/views/real_estate.py | 25 +++++ 30 files changed, 406 insertions(+), 10 deletions(-) create mode 100644 core/apps/evaluation/admin/real_estate.py create mode 100644 core/apps/evaluation/choices/real_estate.py create mode 100644 core/apps/evaluation/filters/real_estate.py create mode 100644 core/apps/evaluation/forms/real_estate.py create mode 100644 core/apps/evaluation/migrations/0005_realestateevaluationmodel.py create mode 100644 core/apps/evaluation/models/real_estate.py create mode 100644 core/apps/evaluation/permissions/real_estate.py create mode 100644 core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py create mode 100644 core/apps/evaluation/serializers/real_estate/__init__.py create mode 100644 core/apps/evaluation/signals/real_estate.py create mode 100644 core/apps/evaluation/tests/real_estate/__init__.py create mode 100644 core/apps/evaluation/tests/real_estate/test_RealEstateEvaluation.py create mode 100644 core/apps/evaluation/translation/real_estate.py create mode 100644 core/apps/evaluation/validators/real_estate.py create mode 100644 core/apps/evaluation/views/real_estate.py diff --git a/core/apps/evaluation/admin/__init__.py b/core/apps/evaluation/admin/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/admin/__init__.py +++ b/core/apps/evaluation/admin/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/admin/real_estate.py b/core/apps/evaluation/admin/real_estate.py new file mode 100644 index 0000000..37ac9f0 --- /dev/null +++ b/core/apps/evaluation/admin/real_estate.py @@ -0,0 +1,12 @@ +from django.contrib import admin +from unfold.admin import ModelAdmin + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +@admin.register(RealEstateEvaluationModel) +class RealestateevaluationAdmin(ModelAdmin): + list_display = ( + "id", + "__str__", + ) diff --git a/core/apps/evaluation/choices/real_estate.py b/core/apps/evaluation/choices/real_estate.py new file mode 100644 index 0000000..28431a4 --- /dev/null +++ b/core/apps/evaluation/choices/real_estate.py @@ -0,0 +1,18 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class PropertyType(models.TextChoices): + APARTMENT = "apartment", _("Apartment") + HOUSE = "house", _("House") + OFFICE = "office", _("Office") + LAND = "land", _("Land") + COMMERCIAL = "commercial", _("Commercial") + INDUSTRIAL = "industrial", _("Industrial") + + +class RealEstateCondition(models.TextChoices): + NEW = "new", _("New (Rough finish)") + FINISHED = "finished", _("Finished (Standard/Euro)") + REPAIR_REQUIRED = "repair_required", _("Needs repair") + UNDER_CONSTRUCTION = "under_construction", _("Under construction") diff --git a/core/apps/evaluation/filters/__init__.py b/core/apps/evaluation/filters/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/filters/__init__.py +++ b/core/apps/evaluation/filters/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/filters/real_estate.py b/core/apps/evaluation/filters/real_estate.py new file mode 100644 index 0000000..a40c15c --- /dev/null +++ b/core/apps/evaluation/filters/real_estate.py @@ -0,0 +1,13 @@ +from django_filters import rest_framework as filters + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +class RealestateevaluationFilter(filters.FilterSet): + # name = filters.CharFilter(field_name="name", lookup_expr="icontains") + + class Meta: + model = RealEstateEvaluationModel + fields = [ + "name", + ] diff --git a/core/apps/evaluation/forms/__init__.py b/core/apps/evaluation/forms/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/forms/__init__.py +++ b/core/apps/evaluation/forms/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/forms/real_estate.py b/core/apps/evaluation/forms/real_estate.py new file mode 100644 index 0000000..3fad985 --- /dev/null +++ b/core/apps/evaluation/forms/real_estate.py @@ -0,0 +1,10 @@ +from django import forms + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +class RealestateevaluationForm(forms.ModelForm): + + class Meta: + model = RealEstateEvaluationModel + fields = "__all__" diff --git a/core/apps/evaluation/migrations/0005_realestateevaluationmodel.py b/core/apps/evaluation/migrations/0005_realestateevaluationmodel.py new file mode 100644 index 0000000..af47d16 --- /dev/null +++ b/core/apps/evaluation/migrations/0005_realestateevaluationmodel.py @@ -0,0 +1,39 @@ +# Generated by Django 5.2.7 on 2026-02-13 12:30 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('evaluation', '0004_autoevaluationmodel'), + ] + + operations = [ + migrations.CreateModel( + name='RealEstateEvaluationModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('property_type', models.CharField(choices=[('apartment', 'Apartment'), ('house', 'House'), ('office', 'Office'), ('land', 'Land'), ('commercial', 'Commercial'), ('industrial', 'Industrial')], default='apartment', max_length=50, verbose_name='property type')), + ('address', models.TextField(verbose_name='address')), + ('cadastral_number', models.CharField(blank=True, max_length=50, null=True, verbose_name='cadastral number')), + ('total_area', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='total area')), + ('living_area', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='living area')), + ('floor', models.IntegerField(blank=True, null=True, verbose_name='floor')), + ('total_floors', models.IntegerField(blank=True, null=True, verbose_name='total floors')), + ('rooms_count', models.IntegerField(blank=True, null=True, verbose_name='rooms count')), + ('build_year', models.IntegerField(blank=True, null=True, verbose_name='build year')), + ('condition', models.CharField(blank=True, choices=[('new', 'New (Rough finish)'), ('finished', 'Finished (Standard/Euro)'), ('repair_required', 'Needs repair'), ('under_construction', 'Under construction')], max_length=50, null=True, verbose_name='condition')), + ('has_renovation', models.BooleanField(default=False, verbose_name='has renovation')), + ('valuation', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='real_estate_detail', to='evaluation.valuationmodel', verbose_name='valuation')), + ], + options={ + 'verbose_name': 'Real Estate Evaluation', + 'verbose_name_plural': 'Real Estate Evaluations', + 'db_table': 'RealEstateEvaluation', + }, + ), + ] diff --git a/core/apps/evaluation/models/__init__.py b/core/apps/evaluation/models/__init__.py index e516473..e1a2425 100644 --- a/core/apps/evaluation/models/__init__.py +++ b/core/apps/evaluation/models/__init__.py @@ -1,5 +1,7 @@ from .auto import * # noqa +from .real_estate import * # noqa + from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa -from .auto import * # noqa diff --git a/core/apps/evaluation/models/real_estate.py b/core/apps/evaluation/models/real_estate.py new file mode 100644 index 0000000..7432a66 --- /dev/null +++ b/core/apps/evaluation/models/real_estate.py @@ -0,0 +1,68 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django_core.models import AbstractBaseModel +from model_bakery import baker + + +from .valuation import ValuationModel +from core.apps.evaluation.choices.real_estate import PropertyType, RealEstateCondition + + + + +class RealEstateEvaluationModel(AbstractBaseModel): + valuation = models.OneToOneField( + ValuationModel, + on_delete=models.CASCADE, + related_name="real_estate_detail", + verbose_name=_("valuation"), + ) + property_type = models.CharField( + verbose_name=_("property type"), + max_length=50, + choices=PropertyType.choices, + default=PropertyType.APARTMENT, + ) + address = models.TextField(verbose_name=_("address")) + cadastral_number = models.CharField( + verbose_name=_("cadastral number"), max_length=50, blank=True, null=True + ) + total_area = models.DecimalField( + verbose_name=_("total area"), max_digits=12, decimal_places=2 + ) + living_area = models.DecimalField( + verbose_name=_("living area"), + max_digits=12, + decimal_places=2, + blank=True, + null=True, + ) + floor = models.IntegerField(verbose_name=_("floor"), blank=True, null=True) + total_floors = models.IntegerField( + verbose_name=_("total floors"), blank=True, null=True + ) + rooms_count = models.IntegerField( + verbose_name=_("rooms count"), blank=True, null=True + ) + build_year = models.IntegerField(verbose_name=_("build year"), blank=True, null=True) + condition = models.CharField( + verbose_name=_("condition"), + max_length=50, + choices=RealEstateCondition.choices, + blank=True, + null=True, + ) + has_renovation = models.BooleanField(verbose_name=_("has renovation"), default=False) + + def __str__(self): + return f"Real Estate Evaluation for {self.valuation}" + + @classmethod + def _baker(cls): + return baker.make(cls) + + class Meta: + db_table = "RealEstateEvaluation" + verbose_name = _("Real Estate Evaluation") + verbose_name_plural = _("Real Estate Evaluations") + diff --git a/core/apps/evaluation/permissions/__init__.py b/core/apps/evaluation/permissions/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/permissions/__init__.py +++ b/core/apps/evaluation/permissions/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/permissions/real_estate.py b/core/apps/evaluation/permissions/real_estate.py new file mode 100644 index 0000000..90b90c7 --- /dev/null +++ b/core/apps/evaluation/permissions/real_estate.py @@ -0,0 +1,12 @@ +from rest_framework import permissions + + +class RealestateevaluationPermission(permissions.BasePermission): + + def __init__(self) -> None: ... + + def __call__(self, *args, **kwargs): + return self + + def has_permission(self, request, view): + return True diff --git a/core/apps/evaluation/serializers/__init__.py b/core/apps/evaluation/serializers/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/serializers/__init__.py +++ b/core/apps/evaluation/serializers/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/serializers/auto/AutoEvaluation.py b/core/apps/evaluation/serializers/auto/AutoEvaluation.py index e8221d1..7ee6e04 100644 --- a/core/apps/evaluation/serializers/auto/AutoEvaluation.py +++ b/core/apps/evaluation/serializers/auto/AutoEvaluation.py @@ -9,6 +9,7 @@ class BaseAutoevaluationSerializer(serializers.ModelSerializer): fields = [ "id", "valuation", + "vehicle", ] @@ -25,4 +26,5 @@ class CreateAutoevaluationSerializer(BaseAutoevaluationSerializer): fields = [ "id", "valuation", + "vehicle", ] diff --git a/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py b/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py new file mode 100644 index 0000000..63eddad --- /dev/null +++ b/core/apps/evaluation/serializers/real_estate/RealEstateEvaluation.py @@ -0,0 +1,50 @@ +from rest_framework import serializers + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +class BaseRealestateevaluationSerializer(serializers.ModelSerializer): + class Meta: + model = RealEstateEvaluationModel + fields = [ + "id", + "valuation", + "property_type", + "address", + "cadastral_number", + "total_area", + "living_area", + "floor", + "total_floors", + "rooms_count", + "build_year", + "condition", + "has_renovation", + ] + + +class ListRealestateevaluationSerializer(BaseRealestateevaluationSerializer): + class Meta(BaseRealestateevaluationSerializer.Meta): ... + + +class RetrieveRealestateevaluationSerializer(BaseRealestateevaluationSerializer): + class Meta(BaseRealestateevaluationSerializer.Meta): ... + + +class CreateRealestateevaluationSerializer(BaseRealestateevaluationSerializer): + class Meta(BaseRealestateevaluationSerializer.Meta): + fields = [ + "id", + "valuation", + "property_type", + "address", + "cadastral_number", + "total_area", + "living_area", + "floor", + "total_floors", + "rooms_count", + "build_year", + "condition", + "has_renovation", + ] diff --git a/core/apps/evaluation/serializers/real_estate/__init__.py b/core/apps/evaluation/serializers/real_estate/__init__.py new file mode 100644 index 0000000..3a80636 --- /dev/null +++ b/core/apps/evaluation/serializers/real_estate/__init__.py @@ -0,0 +1 @@ +from .RealEstateEvaluation import * # noqa diff --git a/core/apps/evaluation/signals/__init__.py b/core/apps/evaluation/signals/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/signals/__init__.py +++ b/core/apps/evaluation/signals/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/signals/real_estate.py b/core/apps/evaluation/signals/real_estate.py new file mode 100644 index 0000000..dc3831a --- /dev/null +++ b/core/apps/evaluation/signals/real_estate.py @@ -0,0 +1,8 @@ +from django.db.models.signals import post_save +from django.dispatch import receiver + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +@receiver(post_save, sender=RealEstateEvaluationModel) +def RealestateevaluationSignal(sender, instance, created, **kwargs): ... diff --git a/core/apps/evaluation/tests/__init__.py b/core/apps/evaluation/tests/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/tests/__init__.py +++ b/core/apps/evaluation/tests/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/tests/real_estate/__init__.py b/core/apps/evaluation/tests/real_estate/__init__.py new file mode 100644 index 0000000..c67a1f1 --- /dev/null +++ b/core/apps/evaluation/tests/real_estate/__init__.py @@ -0,0 +1 @@ +from .test_RealEstateEvaluation import * # noqa diff --git a/core/apps/evaluation/tests/real_estate/test_RealEstateEvaluation.py b/core/apps/evaluation/tests/real_estate/test_RealEstateEvaluation.py new file mode 100644 index 0000000..7256e22 --- /dev/null +++ b/core/apps/evaluation/tests/real_estate/test_RealEstateEvaluation.py @@ -0,0 +1,101 @@ +import pytest +from django.urls import reverse +from rest_framework.test import APIClient + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +@pytest.fixture +def instance(db): + return RealEstateEvaluationModel._baker() + + +@pytest.fixture +def api_client(instance): + client = APIClient() + ##client.force_authenticate(user=instance.user) + return client, instance + + +@pytest.fixture +def data(api_client): + client, instance = api_client + return ( + { + "list": reverse("real-estate-evaluation-list"), + "retrieve": reverse("real-estate-evaluation-detail", kwargs={"pk": instance.pk}), + "retrieve-not-found": reverse("real-estate-evaluation-detail", kwargs={"pk": 1000}), + }, + client, + instance, + ) + + +@pytest.mark.django_db +def test_list(data): + urls, client, _ = data + response = client.get(urls["list"]) + data_resp = response.json() + assert response.status_code == 200 + assert data_resp["status"] is True + + +@pytest.mark.django_db +def test_retrieve(data): + urls, client, _ = data + response = client.get(urls["retrieve"]) + data_resp = response.json() + assert response.status_code == 200 + assert data_resp["status"] is True + + +@pytest.mark.django_db +def test_retrieve_not_found(data): + urls, client, _ = data + response = client.get(urls["retrieve-not-found"]) + data_resp = response.json() + assert response.status_code == 404 + assert data_resp["status"] is False + + +# @pytest.mark.django_db +# def test_create(data): +# urls, client, _ = data +# response = client.post(urls["list"], data={"name": "test"}) +# assert response.json()["status"] is True +# assert response.status_code == 201 + + +# @pytest.mark.django_db +# def test_update(data): +# urls, client, _ = data +# response = client.patch(urls["retrieve"], data={"name": "updated"}) +# assert response.json()["status"] is True +# assert response.status_code == 200 +# +# # verify updated value +# response = client.get(urls["retrieve"]) +# assert response.json()["status"] is True +# assert response.status_code == 200 +# assert response.json()["data"]["name"] == "updated" + + +# @pytest.mark.django_db +# def test_partial_update(): +# urls, client, _ = data +# response = client.patch(urls["retrieve"], data={"name": "updated"}) +# assert response.json()["status"] is True +# assert response.status_code == 200 +# +# # verify updated value +# response = client.get(urls["retrieve"]) +# assert response.json()["status"] is True +# assert response.status_code == 200 +# assert response.json()["data"]["name"] == "updated" + + +# @pytest.mark.django_db +# def test_destroy(data): +# urls, client, _ = data +# response = client.delete(urls["retrieve"]) +# assert response.status_code == 204 diff --git a/core/apps/evaluation/tests/valuation/test_Valuation.py b/core/apps/evaluation/tests/valuation/test_Valuation.py index 9929a2b..c14f211 100644 --- a/core/apps/evaluation/tests/valuation/test_Valuation.py +++ b/core/apps/evaluation/tests/valuation/test_Valuation.py @@ -22,9 +22,9 @@ def data(api_client): client, instance = api_client return ( { - "list": reverse("Valuation-list"), - "retrieve": reverse("Valuation-detail", kwargs={"pk": instance.pk}), - "retrieve-not-found": reverse("Valuation-detail", kwargs={"pk": 1000}), + "list": reverse("valuation-list"), + "retrieve": reverse("valuation-detail", kwargs={"pk": instance.pk}), + "retrieve-not-found": reverse("valuation-detail", kwargs={"pk": 1000}), }, client, instance, diff --git a/core/apps/evaluation/tests/vehicle/test_Vehicle.py b/core/apps/evaluation/tests/vehicle/test_Vehicle.py index 5a0fc62..64a75f0 100644 --- a/core/apps/evaluation/tests/vehicle/test_Vehicle.py +++ b/core/apps/evaluation/tests/vehicle/test_Vehicle.py @@ -22,9 +22,9 @@ def data(api_client): client, instance = api_client return ( { - "list": reverse("Vehicle-list"), - "retrieve": reverse("Vehicle-detail", kwargs={"pk": instance.pk}), - "retrieve-not-found": reverse("Vehicle-detail", kwargs={"pk": 1000}), + "list": reverse("vehicle-list"), + "retrieve": reverse("vehicle-detail", kwargs={"pk": instance.pk}), + "retrieve-not-found": reverse("vehicle-detail", kwargs={"pk": 1000}), }, client, instance, diff --git a/core/apps/evaluation/translation/__init__.py b/core/apps/evaluation/translation/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/translation/__init__.py +++ b/core/apps/evaluation/translation/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/translation/real_estate.py b/core/apps/evaluation/translation/real_estate.py new file mode 100644 index 0000000..943787b --- /dev/null +++ b/core/apps/evaluation/translation/real_estate.py @@ -0,0 +1,8 @@ +from modeltranslation.translator import TranslationOptions, register + +from core.apps.evaluation.models import RealEstateEvaluationModel + + +@register(RealEstateEvaluationModel) +class RealestateevaluationTranslation(TranslationOptions): + fields = [] diff --git a/core/apps/evaluation/urls.py b/core/apps/evaluation/urls.py index b719882..623a1ee 100644 --- a/core/apps/evaluation/urls.py +++ b/core/apps/evaluation/urls.py @@ -1,12 +1,20 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from .views import AutoEvaluationView, CustomerView, PropertyOwnerView, ValuationView, VehicleView +from .views import ( + AutoEvaluationView, + CustomerView, + PropertyOwnerView, + RealEstateEvaluationView, + ValuationView, + VehicleView, +) router = DefaultRouter() +router.register("real-estate-evaluation", RealEstateEvaluationView, basename="real-estate-evaluation") router.register("auto-evaluation", AutoEvaluationView, basename="auto-evaluation") -router.register("Vehicle", VehicleView, basename="Vehicle") -router.register("Valuation", ValuationView, basename="Valuation") +router.register("vehicle", VehicleView, basename="vehicle") +router.register("valuation", ValuationView, basename="valuation") router.register("property-owner", PropertyOwnerView, basename="property-owner") router.register("customer", CustomerView, basename="customer") urlpatterns = [path("", include(router.urls))] diff --git a/core/apps/evaluation/validators/__init__.py b/core/apps/evaluation/validators/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/validators/__init__.py +++ b/core/apps/evaluation/validators/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/validators/real_estate.py b/core/apps/evaluation/validators/real_estate.py new file mode 100644 index 0000000..ba30fd5 --- /dev/null +++ b/core/apps/evaluation/validators/real_estate.py @@ -0,0 +1,8 @@ +# from django.core.exceptions import ValidationError + + +class RealestateevaluationValidator: + def __init__(self): ... + + def __call__(self): + return True diff --git a/core/apps/evaluation/views/__init__.py b/core/apps/evaluation/views/__init__.py index a21258a..e83b3b8 100644 --- a/core/apps/evaluation/views/__init__.py +++ b/core/apps/evaluation/views/__init__.py @@ -1,4 +1,5 @@ from .auto import * # noqa from .customer import * # noqa +from .real_estate import * # noqa from .valuation import * # noqa from .vehicle import * # noqa diff --git a/core/apps/evaluation/views/real_estate.py b/core/apps/evaluation/views/real_estate.py new file mode 100644 index 0000000..f84a60c --- /dev/null +++ b/core/apps/evaluation/views/real_estate.py @@ -0,0 +1,25 @@ +from django_core.mixins import BaseViewSetMixin +from drf_spectacular.utils import extend_schema +from rest_framework.permissions import AllowAny +from rest_framework.viewsets import ReadOnlyModelViewSet + +from core.apps.evaluation.models import RealEstateEvaluationModel +from core.apps.evaluation.serializers.real_estate import ( + CreateRealestateevaluationSerializer, + ListRealestateevaluationSerializer, + RetrieveRealestateevaluationSerializer, +) + + +@extend_schema(tags=["RealEstateEvaluation"]) +class RealEstateEvaluationView(BaseViewSetMixin, ReadOnlyModelViewSet): + queryset = RealEstateEvaluationModel.objects.all() + serializer_class = ListRealestateevaluationSerializer + permission_classes = [AllowAny] + + action_permission_classes = {} + action_serializer_class = { + "list": ListRealestateevaluationSerializer, + "retrieve": RetrieveRealestateevaluationSerializer, + "create": CreateRealestateevaluationSerializer, + } -- 2.49.1