From 181ba1c9b78d71e4c320746877dc48da5bf1ba4a Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Fri, 9 Feb 2018 22:12:09 +0300 Subject: [PATCH] Update Course and gallery serializers --- api/v1/serializers/content.py | 24 ++++++++++++----------- api/v1/serializers/course.py | 36 ++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/api/v1/serializers/content.py b/api/v1/serializers/content.py index cdaa5351..67fffd22 100644 --- a/api/v1/serializers/content.py +++ b/api/v1/serializers/content.py @@ -180,13 +180,14 @@ class ContentSerializer(serializers.ModelSerializer): return super(ContentSerializer, self).to_representation(obj) -class GallerySerializer(serializers.ModelSerializer): +class GalleryImageCreateSerializer(serializers.ModelSerializer): class Meta: - model = Gallery + model = GalleryImage fields = ( 'id', - 'title', + 'gallery', + 'img', 'created_at', 'update_at', ) @@ -198,14 +199,19 @@ class GallerySerializer(serializers.ModelSerializer): ) -class GalleryImageCreateSerializer(serializers.ModelSerializer): +class GalleryImageSerializer(GalleryImageCreateSerializer): + img = ImageObjectSerializer() + + +class GallerySerializer(serializers.ModelSerializer): + gallery_images = GalleryImageSerializer(many=True) class Meta: - model = GalleryImage + model = Gallery fields = ( 'id', - 'gallery', - 'img', + 'title', + 'gallery_images', 'created_at', 'update_at', ) @@ -215,7 +221,3 @@ class GalleryImageCreateSerializer(serializers.ModelSerializer): 'created_at', 'update_at', ) - - -class GalleryImageSerializer(GalleryImageCreateSerializer): - img = ImageObjectSerializer() diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 19bace7d..55c82b03 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -76,6 +76,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): required=False, ) materials = MaterialSerializer(many=True, required=False) + gallery = GallerySerializer() class Meta: model = Course @@ -110,7 +111,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): 'update_at', ) - def dispatch_content(self, course, validated_data, content, materials): + def dispatch_content(self, course, content, materials): for c in content: if c['type'] == 'text': if 'id' in c['data'] and c['data']['id']: @@ -189,18 +190,47 @@ class CourseCreateSerializer(serializers.ModelSerializer): ) course.materials.add(m) + def dispatch_gallery(self, course, gallery): + if gallery: + if 'id' in gallery and gallery['id']: + g = Gallery.objects.get(id=gallery['id']) + g.title = gallery.get('title', g.title) + g.save() + else: + g = Gallery.objects.create( + title=gallery.get('title', '') + ) + if 'images' in gallery: + for i in gallery['images']: + if 'id' in i and i['id']: + gi = GalleryImage.objects.get(id=i['id']) + gi.gallery = g + gi.img = i['img'] + gi.save() + else: + gi = GalleryImage.objects.create( + gallery=g, + img=i['img'], + ) + course.gallery = g + course.save() + def create(self, validated_data): content = validated_data.pop('content', []) materials = validated_data.pop('materials', []) + gallery = validated_data.pop('gallery', {}) course = super().create(validated_data) - self.dispatch_content(course, validated_data, content, materials) + self.dispatch_content(course, content, materials) + self.dispatch_gallery(course, gallery) return course def update(self, instance, validated_data): content = validated_data.pop('content', []) materials = validated_data.pop('materials', []) + gallery = validated_data.pop('gallery', {}) course = super().update(instance, validated_data) - self.dispatch_content(course, validated_data, content, materials) + self.dispatch_content(course, content, materials) + self.dispatch_gallery(course, gallery) return course