From 22ee06403f53d98b1e398f7626ed9f4151b8332a Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Fri, 31 Jan 2020 01:04:39 +0300 Subject: [PATCH] menu create --- apps/establishment/serializers/back.py | 10 ++++------ apps/establishment/views/back.py | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 48124ddb..f9958d09 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -727,7 +727,7 @@ class MenuBackOfficeSerializer(serializers.ModelSerializer): drinks_included = serializers.BooleanField(source='is_drinks_included') establishment_id = serializers.IntegerField(source='establishment.id') establishment_slug = serializers.CharField(source='establishment.slug', read_only=True) - uploads = MenuFilesSerializers(many=True) + uploads = MenuFilesSerializers(many=True, read_only=True) class Meta: model = models.Menu @@ -742,9 +742,11 @@ class MenuBackOfficeSerializer(serializers.ModelSerializer): 'lunch', 'last_update', 'uploads', + 'uploads_ids', ] extra_kwargs = { - 'last_update': {'read_only': True} + 'last_update': {'read_only': True}, + 'uploads_ids': {'write_only': True, 'source': 'uploads', 'required': True}, } def validate(self, attrs): @@ -753,8 +755,6 @@ class MenuBackOfficeSerializer(serializers.ModelSerializer): def update(self, instance, validated_data): uploaded_files_ids = validated_data.pop('uploads') - if len(uploaded_files_ids): - uploaded_files_ids = list(models.MenuFiles.objects.filter(id__in=uploaded_files_ids)) establishment_kwargs = validated_data.pop('establishment') establishment = get_object_or_404(models.Establishment, **establishment_kwargs) validated_data['establishment'] = establishment @@ -764,8 +764,6 @@ class MenuBackOfficeSerializer(serializers.ModelSerializer): def create(self, validated_data): uploaded_files_ids = validated_data.pop('uploads') - if len(uploaded_files_ids): - uploaded_files_ids = list(models.MenuFiles.objects.filter(id__in=uploaded_files_ids)) establishment_kwargs = validated_data.pop('establishment') establishment = get_object_or_404(models.Establishment, **establishment_kwargs) validated_data['establishment'] = establishment diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index c4533480..e81183e7 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,5 +1,6 @@ """Establishment app views.""" from django.db.models.query_utils import Q +from django.db import transaction from django.http import Http404 from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend @@ -172,18 +173,19 @@ class MenuListCreateView(generics.ListCreateAPIView): def create(self, request, *args, **kwargs): response_data = [] - for menu in request.data: - if 'id' in menu: + with transaction.atomic(): + 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: + instance = get_object_or_404(Menu, pk=menu['id']) + serializer = self.get_serializer(instance, data=menu) + else: - serializer = self.get_serializer(data=menu) + serializer = self.get_serializer(data=menu) - serializer.is_valid(raise_exception=True) - serializer.save() - response_data.append(serializer.data) + serializer.is_valid(raise_exception=True) + serializer.save() + response_data.append(serializer.data) return Response(response_data, status=status.HTTP_201_CREATED)