From d2f04d4958c89d1e14f04d63d408d25db47277cd Mon Sep 17 00:00:00 2001 From: dormantman Date: Sat, 25 Jan 2020 00:42:00 +0300 Subject: [PATCH] Reformat method structure --- apps/establishment/serializers/back.py | 2 -- apps/establishment/views/back.py | 27 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index dbcaebfa..95b1050f 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -531,7 +531,6 @@ class EstablishmentAdminListSerializer(UserShortSerializer): class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): """Establishments from employee serializer""" - restaurant_name = serializers.CharField(read_only=True, source='establishment.name') position = PositionBackSerializer(read_only=True) state = serializers.CharField(read_only=True, source='status') start = serializers.DateTimeField(read_only=True, source='from_date') @@ -540,7 +539,6 @@ class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): class Meta: model = models.EstablishmentEmployee fields = [ - 'restaurant_name', 'position', 'state', 'start', diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index e8600b97..eef93e18 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,4 +1,6 @@ """Establishment app views.""" +from collections import defaultdict + from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend from rest_framework import generics, permissions @@ -39,10 +41,27 @@ class EmployeeEstablishmentsListView(generics.ListAPIView): queryset = models.EstablishmentEmployee.objects.all() serializer_class = serializers.EstablishmentEmployeeListSerializer - def get_queryset(self): + def list(self, request, *args, **kwargs): pk = self.kwargs.get('pk') employee = get_object_or_404(models.Employee, pk=pk) - return employee.establishmentemployee_set.all() + + preload_data = defaultdict(list) + for establishment_employee in employee.establishmentemployee_set.all() \ + .prefetch_related('establishment').select_related('position'): + establishment_name = establishment_employee.establishment.name + + preload_data[establishment_name].append( + serializers.EstablishmentEmployeeListSerializer(establishment_employee).data + ) + + data = [{ + 'restaurant_name': establishment_name, + 'positions': [ + preload_data[establishment_name] + ] + } for establishment_name in preload_data] + + return Response(data) class EmployeePositionsListView(generics.ListAPIView): @@ -59,10 +78,6 @@ class EmployeePositionsListView(generics.ListAPIView): queryset = employee.establishments.with_extended_related() queryset = self.filter_queryset(queryset) - data = PositionBackSerializer( - employee.establishmentemployee_set.all().values_list('position', flat=True), many=True - ).data - page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True)