From 6e91a2ef92fb8b0f8d24887e0ad6aa5e2184f907 Mon Sep 17 00:00:00 2001 From: dormantman Date: Sat, 11 Jan 2020 07:27:37 +0300 Subject: [PATCH 1/7] Added non-required field agenda for methods --- apps/news/serializers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 2c7983d1..a803e009 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -180,6 +180,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): """News back office base serializer.""" is_published = serializers.BooleanField(source='is_publish', read_only=True) descriptions = serializers.ListField(required=False) + agenda = serializers.RelatedField(many=True, queryset=models.Agenda.objects.all(), required=False) class Meta(NewsBaseSerializer.Meta): """Meta class.""" @@ -198,6 +199,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): 'created', 'modified', 'descriptions', + 'agenda' ) extra_kwargs = { 'created': {'read_only': True}, From bcf73897c87a885edc2ea4dc2b90e51787285163 Mon Sep 17 00:00:00 2001 From: dormantman Date: Sat, 11 Jan 2020 07:49:50 +0300 Subject: [PATCH 2/7] Added agenda validation --- apps/news/serializers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index a803e009..973c4c8e 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -230,6 +230,13 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): for locale in locales: if not attrs[key].get(locale): attrs[key][locale] = getattr(instance, key).get(locale) + + if 'agenda' in attrs: + agenda = models.Agenda.objects.get(attrs['agenda']) + + if agenda.event_name is None or agenda.content is None: + raise serializers.ValidationError({'agenda': _('Agenda is empty')}) + return attrs def create(self, validated_data): From 62a66a80fb7a19a20001b77d7f45faf5d6d6962b Mon Sep 17 00:00:00 2001 From: dormantman Date: Sat, 11 Jan 2020 07:56:21 +0300 Subject: [PATCH 3/7] Added agenda validation in all methods --- apps/news/serializers.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 973c4c8e..77499b84 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -231,12 +231,6 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): if not attrs[key].get(locale): attrs[key][locale] = getattr(instance, key).get(locale) - if 'agenda' in attrs: - agenda = models.Agenda.objects.get(attrs['agenda']) - - if agenda.event_name is None or agenda.content is None: - raise serializers.ValidationError({'agenda': _('Agenda is empty')}) - return attrs def create(self, validated_data): @@ -254,6 +248,10 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): user = request.user validated_data['created_by'] = user + 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')}) + return super().create(validated_data) def update(self, instance, validated_data): @@ -265,6 +263,11 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): slugs__values__contains=list(slugs.values()) ).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')}) + return super().update(instance, validated_data) From da1fa9d83a001b7c793b653ea1838c547fd1b42d Mon Sep 17 00:00:00 2001 From: dormantman Date: Mon, 13 Jan 2020 18:59:01 +0300 Subject: [PATCH 4/7] Added agenda creating --- apps/news/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 77499b84..3e337de0 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -180,7 +180,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): """News back office base serializer.""" is_published = serializers.BooleanField(source='is_publish', read_only=True) descriptions = serializers.ListField(required=False) - agenda = serializers.RelatedField(many=True, queryset=models.Agenda.objects.all(), required=False) + agenda = AgendaSerializer() class Meta(NewsBaseSerializer.Meta): """Meta class.""" From 783e2e59311589af1ebd2c47d32539c7aa2ead11 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Thu, 16 Jan 2020 16:40:17 +0300 Subject: [PATCH 5/7] cascade create agenda --- apps/news/serializers.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 3e337de0..bed24907 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -22,7 +22,9 @@ from utils.serializers import ( class AgendaSerializer(ProjectModelSerializer): start_datetime = serializers.DateTimeField() end_datetime = serializers.DateTimeField() - address = AddressBaseSerializer() + address = AddressBaseSerializer(read_only=True) + address_id = serializers.PrimaryKeyRelatedField(write_only=True, queryset=location_models.Address.objects.all(), + source='address') event_name_translated = TranslatedField() content_translated = TranslatedField() @@ -36,7 +38,8 @@ class AgendaSerializer(ProjectModelSerializer): 'end_datetime', 'address', 'content_translated', - 'event_name_translated' + 'event_name_translated', + 'address_id', ) @@ -248,11 +251,17 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): user = request.user validated_data['created_by'] = user - 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.pop('agenda') + agenda_data['address_id'] = agenda_data.pop('address').pk + agenda_serializer = AgendaSerializer(data=agenda_data) + agenda_serializer.is_valid(raise_exception=True) + agenda = agenda_serializer.save() - return super().create(validated_data) + instance = super().create(validated_data) + instance.agenda = agenda + instance.save() + + return instance def update(self, instance, validated_data): slugs = validated_data.get('slugs') From 6c624115e6ee7edd9e21cfffa573c61d1f65e7c1 Mon Sep 17 00:00:00 2001 From: dormantman Date: Thu, 16 Jan 2020 20:36:19 +0300 Subject: [PATCH 6/7] 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) From a0fdef69b6f9603bf06af26dc85c016c3605ce62 Mon Sep 17 00:00:00 2001 From: dormantman Date: Thu, 16 Jan 2020 21:16:08 +0300 Subject: [PATCH 7/7] Fixed conditions for news methods --- apps/news/serializers.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 791879ca..e7d2e6d3 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -251,11 +251,14 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): user = request.user validated_data['created_by'] = user - agenda_data = validated_data.pop('agenda') - agenda_data['address_id'] = agenda_data.pop('address').pk - agenda_serializer = AgendaSerializer(data=agenda_data) - agenda_serializer.is_valid(raise_exception=True) - agenda = agenda_serializer.save() + agenda_data = validated_data.get('agenda') + agenda = None + + if agenda_data is not None: + agenda_data['address_id'] = agenda_data.pop('address').pk + agenda_serializer = AgendaSerializer(data=agenda_data) + agenda_serializer.is_valid(raise_exception=True) + agenda = agenda_serializer.save() instance = super().create(validated_data) instance.agenda = agenda @@ -276,13 +279,13 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): agenda_data = validated_data.get('agenda') agenda = instance.agenda - if agenda is None: + if agenda is None and agenda_data is not 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: + elif agenda_data is not None: agenda.start_datetime = agenda_data.pop( 'start_datetime') if 'start_datetime' in agenda_data else agenda.start_datetime agenda.end_datetime = agenda_data.pop(