From 084db83c921473f5aadf0c39b078c9cc0fc9bbfa Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 3 Feb 2020 14:55:03 +0300 Subject: [PATCH] menu update/delete --- apps/establishment/urls/back.py | 5 +++-- apps/establishment/views/back.py | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index d454a950..248f6227 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -38,9 +38,10 @@ urlpatterns = [ path('menus/dishes//gallery//', views.MenuGalleryCreateDestroyView.as_view(), name='menu-dishes-gallery-create-destroy'), path('menus/', views.MenuListCreateView.as_view(), name='menu-list'), - path('menus/create//', views.CreateMenuForCertainEstablishmentView.as_view(), name='menu-list'), + path('menus/create//', views.CreateMenuForCertainEstablishmentView.as_view(), + name='menu-list'), path('card_and_wines//', views.CardAndWinesListView.as_view(), name='card-and-wines-get'), - path('menus//', views.MenuRUDView.as_view(), name='menu-rud'), + path('menus//', views.MenuRUDView.as_view(), name='menu-rud'), path('menus/dish//', views.DishCreateView.as_view(), name='create-dish'), path('menus/dish/change//', views.DishUpdateDeleteView.as_view(), name='update-delete-dish'), path('menus/wine//', views.EstablishmentWineView.as_view(), name='menu-wine'), diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 6467b506..c4bae053 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -241,15 +241,35 @@ class MenuListCreateView(generics.ListCreateAPIView): return Response(response_data, status=status.HTTP_201_CREATED) -class MenuRUDView(generics.RetrieveUpdateDestroyAPIView): +class MenuRUDView(generics.UpdateAPIView, generics.DestroyAPIView): """Menu RUD view.""" - serializer_class = serializers.MenuRUDSerializers + serializer_class = serializers.MenuBackOfficeSerializer queryset = models.Menu.objects.all() permission_classes = get_permission_classes( IsEstablishmentManager, IsEstablishmentAdministrator, ) + def get_object(self): + return get_object_or_404(klass=models.Menu, pk=self.kwargs['menu_id']) + + def update(self, request, *args, **kwargs): + partial = kwargs.pop('partial', False) + instance = self.get_object() + data = request.data.copy() + data['establishment_id'] = instance.establishment.pk + serializer = self.get_serializer(instance, data=data, partial=partial) + serializer.is_valid(raise_exception=True) + with transaction.atomic(): + self.perform_update(serializer) + + if getattr(instance, '_prefetched_objects_cache', None): + # If 'prefetch_related' has been applied to a queryset, we need to + # forcibly invalidate the prefetch cache on the instance. + instance._prefetched_objects_cache = {} + + return Response(serializer.data) + class MenuUploadsRUDView(generics.RetrieveDestroyAPIView): """Menu uploads RUD view."""