From ae9d505e3dce86b9350abd0c42d76944a776af87 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 30 Jan 2020 23:51:24 +0300 Subject: [PATCH] create and update --- apps/establishment/serializers/back.py | 26 ++++++++++++++++++++++++-- apps/establishment/views/back.py | 19 ++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index c66f639e..0b82308f 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -717,10 +717,10 @@ class MenuFilesSerializers(ProjectModelSerializer): class MenuBackOfficeSerializer(serializers.ModelSerializer): - name = serializers.CharField(read_only=True, source='category_translated') + name = serializers.CharField(source='category_translated') drinks_included = serializers.BooleanField(source='is_drinks_included') establishment_id = serializers.IntegerField(source='establishment.id') - establishment_slug = serializers.CharField(source='establishment.slug') + establishment_slug = serializers.CharField(source='establishment.slug', read_only=True) uploads = MenuFilesSerializers(many=True) class Meta: @@ -740,3 +740,25 @@ class MenuBackOfficeSerializer(serializers.ModelSerializer): extra_kwargs = { 'last_update': {'read_only': True} } + + def validate(self, attrs): + attrs['category'] = {'en-GB': attrs.pop('category_translated')} + return attrs + + def update(self, instance, validated_data): + uploaded_files_ids = validated_data.pop('uploads') + establishment_kwargs = validated_data.pop('establishment') + establishment = get_object_or_404(models.Establishment, **establishment_kwargs) + validated_data['establishment'] = establishment + instance = super().update(instance, validated_data) + instance.uploads.set(uploaded_files_ids) + return instance + + def create(self, validated_data): + uploaded_files_ids = validated_data.pop('uploads') + establishment_kwargs = validated_data.pop('establishment') + establishment = get_object_or_404(models.Establishment, **establishment_kwargs) + validated_data['establishment'] = establishment + instance = models.Menu.objects.create(**validated_data) + instance.uploads.set(uploaded_files_ids) + return instance diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index cba2fdfd..0db69119 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -8,7 +8,7 @@ from rest_framework.response import Response from account.models import User from establishment import filters, models, serializers -from establishment.models import EstablishmentEmployee +from establishment.models import EstablishmentEmployee, Menu from timetable.models import Timetable from timetable.serialziers import ScheduleCreateSerializer, ScheduleRUDSerializer from utils.methods import get_permission_classes @@ -172,6 +172,23 @@ class MenuListCreateView(generics.ListCreateAPIView): 'establishment__slug', ) + def create(self, request, *args, **kwargs): + response_data = [] + for menu in request.data: + if 'id' in menu: + + instance = get_object_or_404(Menu, pk=menu['id']) + serializer = self.get_serializer(instance, data=menu) + else: + + serializer = self.get_serializer(data=menu) + + serializer.is_valid(raise_exception=True) + serializer.save() + response_data.append(serializer.data) + + return Response(response_data, status=status.HTTP_201_CREATED) + class MenuRUDView(generics.RetrieveUpdateDestroyAPIView): """Menu RUD view."""