diff --git a/core/apps/dashboard/serializers/location.py b/core/apps/dashboard/serializers/location.py new file mode 100644 index 0000000..5cd8715 --- /dev/null +++ b/core/apps/dashboard/serializers/location.py @@ -0,0 +1,49 @@ +# django +from django.db import transaction + +# rest framework +from rest_framework import serializers + +# shared +from core.apps.shared.models import Location, UserLocation, District, Place, Doctor, Pharmacy + + + +class LocationListSerializer(serializers.ModelSerializer): + district = serializers.SerializerMethodField(method_name='get_district') + place = serializers.SerializerMethodField(method_name='get_place') + doctor = serializers.SerializerMethodField(method_name='get_doctor') + pharmacy = serializers.SerializerMethodField(method_name='get_pharmacy') + + class Meta: + model = Location + fields = [ + 'id', 'longitude', 'latitude', 'created_at', + 'district', 'place', 'doctor', 'pharmacy', + ] + + def get_district(self, obj): + return { + 'id': obj.district.id, + 'name': obj.district.name, + } if obj.district else None + + + def get_place(self, obj): + return { + 'id': obj.place.id, + 'name': obj.place.name, + } if obj.place else None + + def get_doctor(self, obj): + return { + 'id': obj.doctor.id, + 'first_name': obj.doctor.first_name, + 'last_name': obj.doctor.last_name, + } if obj.doctor else None + + def get_pharmacy(self, obj): + return { + 'id': obj.pharmacy.id, + 'name': obj.pharmacy.name, + } if obj.pharmacy else None \ No newline at end of file diff --git a/core/apps/dashboard/views/district.py b/core/apps/dashboard/views/district.py index 3392dc3..edcd8cc 100644 --- a/core/apps/dashboard/views/district.py +++ b/core/apps/dashboard/views/district.py @@ -31,6 +31,13 @@ class DistrictListApiView(generics.GenericAPIView, ResponseMixin): name='name', description="tuman nomi bo'yicha qidiruv", required=False, + ), + openapi.Parameter( + in_=openapi.IN_QUERY, + type=openapi.TYPE_INTEGER, + name='user', + description="user id bo'yicha filter", + required=False, ) ], responses={ @@ -96,11 +103,13 @@ class DistrictListApiView(generics.GenericAPIView, ResponseMixin): def get(self, request): try: name = request.query_params.get('name', None) + user_id = request.query_params.get('user', None) query = self.queryset.all() if not name is None: query = query.filter(name__istartswith=name) - + if not user_id is None: + query = query.filter(user__id=user_id) page = self.paginate_queryset(queryset=query) if page is not None: serializer = self.serializer_class(page, many=True)