menu dishes gallery api
This commit is contained in:
parent
c0f3aca532
commit
a02a52f2b0
|
|
@ -12,7 +12,6 @@ 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, ProjectModelSerializer, TimeZoneChoiceField
|
||||
|
||||
|
|
@ -593,6 +592,7 @@ class MenuDishesRUDSerializers(ProjectModelSerializer):
|
|||
"""for dessert, main_course and starter category"""
|
||||
|
||||
plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True)
|
||||
gallery = ImageBaseSerializer(read_only=True, source='crop_gallery', many=True)
|
||||
|
||||
class Meta:
|
||||
model = models.Menu
|
||||
|
|
@ -603,4 +603,54 @@ class MenuDishesRUDSerializers(ProjectModelSerializer):
|
|||
'establishment',
|
||||
'is_drinks_included',
|
||||
'schedule',
|
||||
'gallery',
|
||||
]
|
||||
|
||||
|
||||
class MenuGallerySerializer(serializers.ModelSerializer):
|
||||
"""Serializer class for model MenuGallery."""
|
||||
|
||||
class Meta:
|
||||
"""Meta class"""
|
||||
|
||||
model = models.MenuGallery
|
||||
fields = [
|
||||
'id',
|
||||
'is_main',
|
||||
]
|
||||
|
||||
@property
|
||||
def request_kwargs(self):
|
||||
"""Get url kwargs from request."""
|
||||
return self.context.get('request').parser_context.get('kwargs')
|
||||
|
||||
def create(self, validated_data):
|
||||
menu_pk = self.request_kwargs.get('pk')
|
||||
image_id = self.request_kwargs.get('image_id')
|
||||
qs = models.MenuGallery.objects.filter(image_id=image_id, menu_id=menu_pk)
|
||||
instance = qs.first()
|
||||
if instance:
|
||||
qs.update(**validated_data)
|
||||
return instance
|
||||
return super().create(validated_data)
|
||||
|
||||
def validate(self, attrs):
|
||||
"""Override validate method."""
|
||||
menu_pk = self.request_kwargs.get('pk')
|
||||
image_id = self.request_kwargs.get('image_id')
|
||||
|
||||
menu_qs = models.Menu.objects.filter(pk=menu_pk)
|
||||
image_qs = Image.objects.filter(id=image_id)
|
||||
|
||||
if not menu_qs.exists():
|
||||
raise serializers.ValidationError({'detail': _('Menu not found')})
|
||||
if not image_qs.exists():
|
||||
raise serializers.ValidationError({'detail': _('Image not found')})
|
||||
|
||||
menu = menu_qs.first()
|
||||
image = image_qs.first()
|
||||
|
||||
attrs['menu'] = menu
|
||||
attrs['image'] = image
|
||||
|
||||
return attrs
|
||||
|
|
|
|||
|
|
@ -32,6 +32,9 @@ urlpatterns = [
|
|||
name='establishment-admin-list'),
|
||||
path('menus/dishes/', views.MenuDishesListCreateView.as_view(), name='menu-dishes-list'),
|
||||
path('menus/dishes/<int:pk>/', views.MenuDishesRUDView.as_view(), name='menu-dishes-rud'),
|
||||
path('menus/dishes/<int:pk>/gallery/', views.MenuGalleryListView.as_view(), name='menu-dishes-gallery-list'),
|
||||
path('menus/dishes/<int:pk>/gallery/<int:image_id>/', views.MenuGalleryCreateDestroyView.as_view(),
|
||||
name='menu-dishes-gallery-create-destroy'),
|
||||
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
|
||||
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
||||
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework import generics, permissions
|
||||
from rest_framework import generics, permissions, response
|
||||
from rest_framework.response import Response
|
||||
|
||||
from account.models import User
|
||||
|
|
@ -462,3 +462,56 @@ class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
|
|||
serializer_class = serializers.MenuDishesRUDSerializers
|
||||
queryset = models.Menu.objects.dishes().distinct()
|
||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||
|
||||
|
||||
class MenuGalleryListView(generics.ListAPIView):
|
||||
"""Resource for returning gallery for menu for back-office users."""
|
||||
serializer_class = serializers.ImageBaseSerializer
|
||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||
queryset = models.Menu.objects.with_schedule_plates_establishment().with_gallery().dishes()
|
||||
|
||||
def get_object(self):
|
||||
"""Override get_object method."""
|
||||
qs = super(MenuGalleryListView, self).get_queryset()
|
||||
menu = get_object_or_404(qs, pk=self.kwargs.get('pk'))
|
||||
|
||||
# May raise a permission denied
|
||||
# self.check_object_permissions(self.request, menu)
|
||||
|
||||
return menu
|
||||
|
||||
def get_queryset(self):
|
||||
"""Override get_queryset method."""
|
||||
return self.get_object().crop_gallery
|
||||
|
||||
|
||||
class MenuGalleryCreateDestroyView(CreateDestroyGalleryViewMixin):
|
||||
"""Resource for a create gallery for menu for back-office users."""
|
||||
serializer_class = serializers.MenuGallerySerializer
|
||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||
|
||||
def get_queryset(self):
|
||||
"""Override get_queryset method."""
|
||||
qs = models.Menu.objects.with_schedule_plates_establishment().with_gallery().dishes()
|
||||
return qs
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
_ = super().create(request, *args, **kwargs)
|
||||
news_qs = self.filter_queryset(self.get_queryset())
|
||||
return response.Response(
|
||||
data=serializers.MenuDishesRUDSerializers(get_object_or_404(news_qs, pk=kwargs.get('pk'))).data
|
||||
)
|
||||
|
||||
def get_object(self):
|
||||
"""
|
||||
Returns the object the view is displaying.
|
||||
"""
|
||||
menu_qs = self.filter_queryset(self.get_queryset())
|
||||
|
||||
menu = get_object_or_404(menu_qs, pk=self.kwargs.get('pk'))
|
||||
gallery = get_object_or_404(menu.menu_gallery, image_id=self.kwargs.get('image_id'))
|
||||
|
||||
# May raise a permission denied
|
||||
self.check_object_permissions(self.request, gallery)
|
||||
|
||||
return gallery
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user