From 6c624115e6ee7edd9e21cfffa573c61d1f65e7c1 Mon Sep 17 00:00:00 2001 From: dormantman Date: Thu, 16 Jan 2020 20:36:19 +0300 Subject: [PATCH] Added agenda validate to update method --- apps/news/serializers.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index bed24907..791879ca 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -265,7 +265,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): def update(self, instance, validated_data): slugs = validated_data.get('slugs') - slugs_list = list(map(lambda x: x.lower(), slugs.values())) + slugs_list = list(map(lambda x: x.lower(), slugs.values() if slugs else ())) slugs_set = set(slugs_list) if slugs: if models.News.objects.filter( @@ -273,9 +273,27 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): ).exists() or len(slugs_list) != len(slugs_set): raise serializers.ValidationError({'slugs': _('Slug should be unique')}) - agenda = validated_data.get('agenda') - if agenda is not None and (agenda.event_name is None or agenda.content is None): - raise serializers.ValidationError({'agenda': _('Agenda is empty')}) + agenda_data = validated_data.get('agenda') + agenda = instance.agenda + + if agenda is None: + agenda_data['address_id'] = agenda_data.pop('address').pk + agenda_serializer = AgendaSerializer(data=agenda_data) + agenda_serializer.is_valid(raise_exception=True) + agenda_serializer.save() + + else: + agenda.start_datetime = agenda_data.pop( + 'start_datetime') if 'start_datetime' in agenda_data else agenda.start_datetime + agenda.end_datetime = agenda_data.pop( + 'end_datetime') if 'end_datetime' in agenda_data else agenda.end_datetime + agenda.address = agenda_data.pop( + 'address') if 'address' in agenda_data else agenda.address + agenda.event_name = agenda_data.pop( + 'event_name') if 'event_time' in agenda_data else agenda.event_name + agenda.content = agenda_data.pop( + 'content') if 'content' in agenda_data else agenda.content + agenda.save() return super().update(instance, validated_data)