From 8fb8c49bfe9e0b88c7f76185e99a1f3bf7313048 Mon Sep 17 00:00:00 2001 From: dormantman Date: Wed, 22 Jan 2020 18:48:16 +0300 Subject: [PATCH 01/12] Added employee positions method --- apps/establishment/serializers/back.py | 13 +++++++++++ apps/establishment/urls/back.py | 4 +++- apps/establishment/views/back.py | 30 ++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 4000bef9..b09f17a9 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -92,6 +92,19 @@ class EstablishmentListCreateSerializer(model_serializers.EstablishmentBaseSeria return instance +class EstablishmentPositionListSerializer(model_serializers.EstablishmentBaseSerializer): + """Establishment position serializer""" + + class Meta: + model = models.Establishment + fields = [ + 'id', + 'name', + 'transliterated_name', + 'index_name', + ] + + class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer): """Establishment create serializer""" diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index 00d44fc2..4769e332 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -57,6 +57,8 @@ urlpatterns = [ path('subtypes/', views.EstablishmentSubtypeListCreateView.as_view(), name='subtype-list'), path('subtypes//', views.EstablishmentSubtypeRUDView.as_view(), name='subtype-rud'), path('positions/', views.EstablishmentPositionListView.as_view(), name='position-list'), + path('employee_positions//', views.EmployeePositionsListView.as_view(), + name='employee-positions-list'), path('employee_establishments//', views.EmployeeEstablishmentsListView.as_view(), - name='employee-establishments-list') + name='employee-establishments-list'), ] diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 4bbf9533..60642130 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -4,10 +4,12 @@ from django.http import Http404 from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend from rest_framework import generics, permissions +from rest_framework.response import Response from account.models import User from establishment import filters, models, serializers from establishment.models import EstablishmentEmployee +from establishment.serializers import PositionBackSerializer from timetable.models import Timetable from timetable.serialziers import ScheduleCreateSerializer, ScheduleRUDSerializer from utils.permissions import IsCountryAdmin, IsEstablishmentManager, IsWineryReviewer @@ -45,6 +47,34 @@ class EmployeeEstablishmentsListView(generics.ListAPIView): return employee.establishments.with_extended_related() +class EmployeePositionsListView(generics.ListAPIView): + """Establishment position by employee list view.""" + + permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] + queryset = models.Establishment.objects.all() + serializer_class = serializers.EstablishmentPositionListSerializer + + def list(self, request, *args, **kwargs): + pk = self.kwargs.get('pk') + employee = get_object_or_404(models.Employee, pk=pk) + + 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) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + + return Response(serializer.data) + + class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): lookup_field = 'slug' queryset = models.Establishment.objects.all().prefetch_related( From 809b5ccab72100d77081e24aa8e53c061898fe6a Mon Sep 17 00:00:00 2001 From: dormantman Date: Fri, 24 Jan 2020 22:33:39 +0300 Subject: [PATCH 02/12] Fixed employee establishments method --- apps/establishment/serializers/back.py | 20 ++++++++++++++++++++ apps/establishment/views/back.py | 8 +++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index b09f17a9..fcb1c518 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -526,3 +526,23 @@ class EstablishmentAdminListSerializer(UserShortSerializer): 'username', 'email' ] + + +class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): + """Establishments from employee serializer""" + + restaurant = EstablishmentListCreateSerializer(read_only=True, source='establishment') + position = PositionBackSerializer(read_only=True) + state = serializers.CharField(read_only=True, source='status') + start = serializers.DateTimeField(read_only=True, source='from_date') + end = serializers.DateTimeField(read_only=True, source='to_date') + + class Meta: + model = models.EstablishmentEmployee + fields = [ + 'restaurant', + 'position', + 'state', + 'start', + 'end', + ] diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 60642130..e8600b97 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,6 +1,4 @@ """Establishment app views.""" -from django.core.exceptions import ObjectDoesNotExist -from django.http import Http404 from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend from rest_framework import generics, permissions @@ -38,13 +36,13 @@ class EmployeeEstablishmentsListView(generics.ListAPIView): """Establishment by employee list view.""" permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] - queryset = models.Establishment.objects.all() - serializer_class = serializers.EstablishmentListCreateSerializer + queryset = models.EstablishmentEmployee.objects.all() + serializer_class = serializers.EstablishmentEmployeeListSerializer def get_queryset(self): pk = self.kwargs.get('pk') employee = get_object_or_404(models.Employee, pk=pk) - return employee.establishments.with_extended_related() + return employee.establishmentemployee_set.all() class EmployeePositionsListView(generics.ListAPIView): From dd49ee7b6c0775d06db40628068a117ac098d045 Mon Sep 17 00:00:00 2001 From: dormantman Date: Fri, 24 Jan 2020 22:37:06 +0300 Subject: [PATCH 03/12] Reformat restaurant to name --- apps/establishment/serializers/back.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index fcb1c518..dbcaebfa 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -531,7 +531,7 @@ class EstablishmentAdminListSerializer(UserShortSerializer): class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): """Establishments from employee serializer""" - restaurant = EstablishmentListCreateSerializer(read_only=True, source='establishment') + 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 +540,7 @@ class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): class Meta: model = models.EstablishmentEmployee fields = [ - 'restaurant', + 'restaurant_name', 'position', 'state', 'start', From d2f04d4958c89d1e14f04d63d408d25db47277cd Mon Sep 17 00:00:00 2001 From: dormantman Date: Sat, 25 Jan 2020 00:42:00 +0300 Subject: [PATCH 04/12] 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) From 3796a698d2125305ff8faf73561ef6a2668b04cb Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 20:01:44 +0300 Subject: [PATCH 05/12] Added employee-establishment-positions method --- apps/establishment/urls/back.py | 4 +++- apps/establishment/views/back.py | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index 4769e332..396fa9d7 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -57,8 +57,10 @@ urlpatterns = [ path('subtypes/', views.EstablishmentSubtypeListCreateView.as_view(), name='subtype-list'), path('subtypes//', views.EstablishmentSubtypeRUDView.as_view(), name='subtype-rud'), path('positions/', views.EstablishmentPositionListView.as_view(), name='position-list'), - path('employee_positions//', views.EmployeePositionsListView.as_view(), + path('employee_positions//', views.EmployeePositionsListView.as_view(), name='employee-positions-list'), path('employee_establishments//', views.EmployeeEstablishmentsListView.as_view(), name='employee-establishments-list'), + path('employee_establishment_positions//', views.EmployeeEstablishmentPositionsListView.as_view(), + name='employee-establishment-positions-list') ] diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index eef93e18..4ba795a6 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -9,7 +9,6 @@ from rest_framework.response import Response from account.models import User from establishment import filters, models, serializers from establishment.models import EstablishmentEmployee -from establishment.serializers import PositionBackSerializer from timetable.models import Timetable from timetable.serialziers import ScheduleCreateSerializer, ScheduleRUDSerializer from utils.permissions import IsCountryAdmin, IsEstablishmentManager, IsWineryReviewer @@ -34,7 +33,7 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP serializer_class = serializers.EstablishmentListCreateSerializer -class EmployeeEstablishmentsListView(generics.ListAPIView): +class EmployeeEstablishmentPositionsListView(generics.ListAPIView): """Establishment by employee list view.""" permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] @@ -64,6 +63,19 @@ class EmployeeEstablishmentsListView(generics.ListAPIView): return Response(data) +class EmployeeEstablishmentsListView(generics.ListAPIView): + """Establishment by employee list view.""" + + permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] + queryset = models.Establishment.objects.all() + serializer_class = serializers.EstablishmentListCreateSerializer + + def get_queryset(self): + pk = self.kwargs.get('pk') + employee = get_object_or_404(models.Employee, pk=pk) + return employee.establishments.with_extended_related() + + class EmployeePositionsListView(generics.ListAPIView): """Establishment position by employee list view.""" From f45eae56e9fe20ea780f9e020b6e7c3443cfcae2 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 20:03:42 +0300 Subject: [PATCH 06/12] Added new features --- apps/establishment/serializers/back.py | 54 +++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 95b1050f..4729fe06 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -12,8 +12,9 @@ from location.models import Address from location.serializers import AddressDetailSerializer, TranslatedField from main.models import Currency from main.serializers import AwardSerializer +from timetable.serialziers import ScheduleRUDSerializer from utils.decorators import with_base_attributes -from utils.serializers import ImageBaseSerializer, TimeZoneChoiceField +from utils.serializers import ImageBaseSerializer, ProjectModelSerializer, TimeZoneChoiceField def phones_handler(phones_list, establishment): @@ -544,3 +545,54 @@ class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): 'start', 'end', ] + + +class _PlateSerializer(ProjectModelSerializer): + name_translated = TranslatedField() + + class Meta: + model = models.Plate + fields = [ + 'name_translated', + 'price', + ] + + +class MenuDishesSerializer(ProjectModelSerializer): + """for dessert, main_course and starter category""" + + schedule = ScheduleRUDSerializer(many=True, allow_null=True) + plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True) + category_translated = serializers.CharField(read_only=True) + last_update = serializers.DateTimeField(source='created') + + class Meta: + model = models.Menu + fields = [ + 'id', + 'category', + 'category_translated', + 'establishment', + 'is_drinks_included', + 'schedule', + 'plates', + 'last_update', + ] + + +class MenuDishesRUDSerializers(ProjectModelSerializer): + """for dessert, main_course and starter category""" + + plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True) + schedule = ScheduleRUDSerializer(read_only=True, many=True, allow_null=True) + + class Meta: + model = models.Menu + fields = [ + 'id', + 'category', + 'plates', + 'establishment', + 'is_drinks_included', + 'schedule', + ] From b687eb60248712b2b37c931c1260bed059cf7023 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 20:29:42 +0300 Subject: [PATCH 07/12] Change format method --- apps/establishment/views/back.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 9f6e8b3e..239af07f 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -33,14 +33,14 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP serializer_class = serializers.EstablishmentListCreateSerializer -class EmployeeEstablishmentPositionsListView(generics.ListAPIView): +class EmployeeEstablishmentPositionsListView(generics.GenericAPIView): """Establishment by employee list view.""" permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] queryset = models.EstablishmentEmployee.objects.all() serializer_class = serializers.EstablishmentEmployeeListSerializer - def list(self, request, *args, **kwargs): + def get(self, request, *args, **kwargs): pk = self.kwargs.get('pk') employee = get_object_or_404(models.Employee, pk=pk) From e94787716eb37980d6ac1f3130466e5c0e2203b3 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 20:33:51 +0300 Subject: [PATCH 08/12] Change labels --- apps/establishment/urls/back.py | 4 ++-- apps/establishment/views/back.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index 812ac6ea..556b5c8b 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -64,6 +64,6 @@ urlpatterns = [ name='employee-positions-list'), path('employee_establishments//', views.EmployeeEstablishmentsListView.as_view(), name='employee-establishments-list'), - path('employee_establishment_positions//', views.EmployeeEstablishmentPositionsListView.as_view(), - name='employee-establishment-positions-list') + path('employee_establishment_positions//', views.EmployeeEstablishmentPositionsView.as_view(), + name='employee-establishment-positions') ] diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 239af07f..4e8d102d 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -33,8 +33,8 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP serializer_class = serializers.EstablishmentListCreateSerializer -class EmployeeEstablishmentPositionsListView(generics.GenericAPIView): - """Establishment by employee list view.""" +class EmployeeEstablishmentPositionsView(generics.GenericAPIView): + """Establishment by employee view.""" permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] queryset = models.EstablishmentEmployee.objects.all() From 095e482358f0468398fe1db00dc0b55faed84621 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 20:59:19 +0300 Subject: [PATCH 09/12] Optimize method --- apps/establishment/views/back.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 4e8d102d..2302f326 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -41,14 +41,12 @@ class EmployeeEstablishmentPositionsView(generics.GenericAPIView): serializer_class = serializers.EstablishmentEmployeeListSerializer def get(self, request, *args, **kwargs): - pk = self.kwargs.get('pk') - employee = get_object_or_404(models.Employee, pk=pk) + employee_pk = self.kwargs.get('pk') preload_data = defaultdict(list) - for establishment_employee in employee.establishmentemployee_set.all() \ + for establishment_employee in self.get_queryset().filter(employee__id=employee_pk).all() \ .prefetch_related('establishment').select_related('position'): establishment_name = establishment_employee.establishment.name - preload_data[establishment_name].append( serializers.EstablishmentEmployeeListSerializer(establishment_employee).data ) From 415c9b7851fda3e5b61d06d7bba317a4ce1ff742 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 27 Jan 2020 21:18:48 +0300 Subject: [PATCH 10/12] fix --- apps/establishment/views/back.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 2302f326..5d8f7dd5 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -81,21 +81,10 @@ class EmployeePositionsListView(generics.ListAPIView): queryset = models.Establishment.objects.all() serializer_class = serializers.EstablishmentPositionListSerializer - def list(self, request, *args, **kwargs): + def get_queryset(self): pk = self.kwargs.get('pk') employee = get_object_or_404(models.Employee, pk=pk) - - queryset = employee.establishments.with_extended_related() - queryset = self.filter_queryset(queryset) - - page = self.paginate_queryset(queryset) - if page is not None: - serializer = self.get_serializer(page, many=True) - return self.get_paginated_response(serializer.data) - - serializer = self.get_serializer(queryset, many=True) - - return Response(serializer.data) + return employee.establishments.with_extended_related() class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): From d51d3040776066aea8c5437b06d4fb30d392d2a6 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 21:45:06 +0300 Subject: [PATCH 11/12] Refactor (structure) --- apps/establishment/serializers/back.py | 6 ++++-- apps/establishment/views/back.py | 23 ++++++----------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 6eb4b40d..c9b2f2fe 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -14,7 +14,7 @@ from main.models import Currency from main.serializers import AwardSerializer from timetable.serialziers import ScheduleRUDSerializer from utils.decorators import with_base_attributes -from utils.serializers import ImageBaseSerializer, TimeZoneChoiceField, ProjectModelSerializer +from utils.serializers import ImageBaseSerializer, ProjectModelSerializer, TimeZoneChoiceField def phones_handler(phones_list, establishment): @@ -529,9 +529,10 @@ class EstablishmentAdminListSerializer(UserShortSerializer): ] -class EstablishmentEmployeeListSerializer(serializers.ModelSerializer): +class EstablishmentEmployeePositionsSerializer(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,6 +541,7 @@ 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 5d8f7dd5..abe89404 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -38,27 +38,16 @@ class EmployeeEstablishmentPositionsView(generics.GenericAPIView): permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] queryset = models.EstablishmentEmployee.objects.all() - serializer_class = serializers.EstablishmentEmployeeListSerializer + serializer_class = serializers.EstablishmentEmployeePositionsSerializer def get(self, request, *args, **kwargs): employee_pk = self.kwargs.get('pk') - preload_data = defaultdict(list) - for establishment_employee in self.get_queryset().filter(employee__id=employee_pk).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) + return Response(self.get_serializer( + self.get_queryset().filter(employee__id=employee_pk).all() + .prefetch_related('establishment').select_related('position'), + many=True + ).data) class EmployeeEstablishmentsListView(generics.ListAPIView): From bb38bb3393ea902ebda94b6be38a862818ed6855 Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 27 Jan 2020 22:22:17 +0300 Subject: [PATCH 12/12] Change api view method --- apps/establishment/views/back.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index abe89404..1dc7f6d9 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,5 +1,4 @@ """Establishment app views.""" -from collections import defaultdict from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend @@ -33,21 +32,17 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP serializer_class = serializers.EstablishmentListCreateSerializer -class EmployeeEstablishmentPositionsView(generics.GenericAPIView): +class EmployeeEstablishmentPositionsView(generics.ListAPIView): """Establishment by employee view.""" permission_classes = [IsWineryReviewer | IsCountryAdmin | IsEstablishmentManager] queryset = models.EstablishmentEmployee.objects.all() serializer_class = serializers.EstablishmentEmployeePositionsSerializer - def get(self, request, *args, **kwargs): + def get_queryset(self): employee_pk = self.kwargs.get('pk') - - return Response(self.get_serializer( - self.get_queryset().filter(employee__id=employee_pk).all() - .prefetch_related('establishment').select_related('position'), - many=True - ).data) + return super().get_queryset().filter(employee__id=employee_pk).all().prefetch_related( + 'establishment').select_related('position') class EmployeeEstablishmentsListView(generics.ListAPIView):