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 location.serializers import AddressDetailSerializer, TranslatedField
|
||||||
from main.models import Currency
|
from main.models import Currency
|
||||||
from main.serializers import AwardSerializer
|
from main.serializers import AwardSerializer
|
||||||
from timetable.serialziers import ScheduleRUDSerializer
|
|
||||||
from utils.decorators import with_base_attributes
|
from utils.decorators import with_base_attributes
|
||||||
from utils.serializers import ImageBaseSerializer, ProjectModelSerializer, TimeZoneChoiceField
|
from utils.serializers import ImageBaseSerializer, ProjectModelSerializer, TimeZoneChoiceField
|
||||||
|
|
||||||
|
|
@ -593,6 +592,7 @@ class MenuDishesRUDSerializers(ProjectModelSerializer):
|
||||||
"""for dessert, main_course and starter category"""
|
"""for dessert, main_course and starter category"""
|
||||||
|
|
||||||
plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True)
|
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:
|
class Meta:
|
||||||
model = models.Menu
|
model = models.Menu
|
||||||
|
|
@ -603,4 +603,54 @@ class MenuDishesRUDSerializers(ProjectModelSerializer):
|
||||||
'establishment',
|
'establishment',
|
||||||
'is_drinks_included',
|
'is_drinks_included',
|
||||||
'schedule',
|
'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'),
|
name='establishment-admin-list'),
|
||||||
path('menus/dishes/', views.MenuDishesListCreateView.as_view(), name='menu-dishes-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>/', 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/', views.MenuListCreateView.as_view(), name='menu-list'),
|
||||||
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
||||||
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
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 rest_framework.response import Response
|
||||||
|
|
||||||
from account.models import User
|
from account.models import User
|
||||||
|
|
@ -462,3 +462,56 @@ class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
serializer_class = serializers.MenuDishesRUDSerializers
|
serializer_class = serializers.MenuDishesRUDSerializers
|
||||||
queryset = models.Menu.objects.dishes().distinct()
|
queryset = models.Menu.objects.dishes().distinct()
|
||||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
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