diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index dfa14245..5313688f 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -111,79 +111,83 @@ class CourseCreateSerializer(serializers.ModelSerializer): 'update_at', ) - def dispatch_content(self, course, content, materials): + def dispatch_content(self, course, content): for c in content: - if c['type'] == 'text': - if 'id' in c['data'] and c['data']['id']: - t = Text.objects.get(id=c['data']['id']) - t.position = c['data']['position'] - t.title = c['data']['title'] + if 'type' not in c or not c['type'] or 'data' not in c or not c['data']: + continue + ctype = c['type'] + cdata = c['data'] + if ctype == 'text': + if 'id' in cdata and cdata['id']: + t = Text.objects.get(id=cdata['id']) + t.position = cdata['position'] + t.title = cdata['title'] t.course = course - t.txt = c['data']['txt'] + t.txt = cdata['txt'] t.save() else: t = Text.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], course=course, - txt=c['data']['txt'], + txt=cdata['txt'], ) - elif c['type'] == 'image': - if 'id' in c['data'] and c['data']['id']: - image = Image.objects.get(id=c['data']['id']) - image.position = c['data']['position'] - image.title = c['data']['title'] + elif ctype == 'image': + if 'id' in cdata and cdata['id']: + image = Image.objects.get(id=cdata['id']) + image.position = cdata['position'] + image.title = cdata['title'] image.course = course - image.img = ImageObject.objects.get(id=c['data']['img']) + image.img = ImageObject.objects.get(id=cdata['img']) image.save() else: image = Image.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], course=course, - img=ImageObject.objects.get(id=c['data']['img']), + img=ImageObject.objects.get(id=cdata['img']), ) - elif c['type'] == 'image-text': - if 'id' in c['data'] and c['data']['id']: - it = ImageText.objects.get(id=c['data']['id']) - it.position = c['data']['position'] - it.title = c['data']['title'] + elif ctype == 'image-text': + if 'id' in cdata and cdata['id']: + it = ImageText.objects.get(id=cdata['id']) + it.position = cdata['position'] + it.title = cdata['title'] it.course = course - it.img = ImageObject.objects.get(id=c['data']['img']) - it.txt = c['data']['txt'] + it.img = ImageObject.objects.get(id=cdata['img']) + it.txt = cdata['txt'] it.save() else: it = ImageText.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], course=course, - img=ImageObject.objects.get(id=c['data']['img']), - txt=c['data']['txt'], + img=ImageObject.objects.get(id=cdata['img']), + txt=cdata['txt'], ) - elif c['type'] == 'video': - if 'id' in c['data'] and c['data']['id']: - v = Video.objects.get(id=c['data']['id']) - v.position = c['data']['position'] - v.title = c['data']['title'] + elif ctype == 'video': + if 'id' in cdata and cdata['id']: + v = Video.objects.get(id=cdata['id']) + v.position = cdata['position'] + v.title = cdata['title'] v.course = course - v.url = c['data']['url'] + v.url = cdata['url'] v.save() else: v = Video.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], course=course, - url=c['data']['url'], + url=cdata['url'], ) - elif c['type'] == 'images': - if 'id' in c['data'] and c['data']['id']: - g = Gallery.objects.get(id=c['data']['id']) + elif ctype == 'images': + if 'id' in cdata and cdata['id']: + g = Gallery.objects.get(id=cdata['id']) g.course = course - g.position = c['data']['position'] - g.title = c['data']['title'] + g.position = cdata['position'] + g.title = cdata['title'] g.save() - if 'images' in c['data']: - for image in c['data']['images']: + if 'images' in cdata: + for image in cdata['images']: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']) @@ -191,16 +195,17 @@ class CourseCreateSerializer(serializers.ModelSerializer): else: g = Gallery.objects.create( course=course, - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], ) - if 'images' in c['data']: - for image in c['data']['images']: + if 'images' in cdata: + for image in cdata['images']: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']), ) + def dispatch_materials(self, course, materials): for material in materials: if 'id' in material and material['id']: m = Material.objects.get(id=material['id']) @@ -248,7 +253,8 @@ class CourseCreateSerializer(serializers.ModelSerializer): materials = validated_data.pop('materials', []) gallery = validated_data.pop('gallery', {}) course = super().create(validated_data) - self.dispatch_content(course, content, materials) + self.dispatch_content(course, content) + self.dispatch_materials(course, materials) self.dispatch_gallery(course, gallery) return course @@ -257,6 +263,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): materials = validated_data.pop('materials', []) gallery = validated_data.pop('gallery', {}) course = super().update(instance, validated_data) + self.dispatch_materials(course, materials) self.dispatch_content(course, content, materials) self.dispatch_gallery(course, gallery) return course @@ -297,77 +304,81 @@ class LessonCreateSerializer(serializers.ModelSerializer): def dispatch_content(self, lesson, validated_data, content): for c in content: - if c['type'] == 'text': - if 'id' in c['data'] and c['data']['id']: - t = Text.objects.get(id=c['data']['id']) - t.position = c['data']['position'] - t.title = c['data']['title'] + if 'type' not in c or not c['type'] or 'data' not in c or not c['data']: + continue + ctype = c['type'] + cdata = c['data'] + if ctype == 'text': + if 'id' in cdata and cdata['id']: + t = Text.objects.get(id=cdata['id']) + t.position = cdata['position'] + t.title = cdata['title'] t.lesson = lesson - t.txt = c['data']['txt'] + t.txt = cdata['txt'] t.save() else: t = Text.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], lesson=lesson, - txt=c['data']['txt'], + txt=cdata['txt'], ) - elif c['type'] == 'image': - if 'id' in c['data'] and c['data']['id']: - image = Image.objects.get(id=c['data']['id']) - image.position = c['data']['position'] - image.title = c['data']['title'] + elif ctype == 'image': + if 'id' in cdata and cdata['id']: + image = Image.objects.get(id=cdata['id']) + image.position = cdata['position'] + image.title = cdata['title'] image.lesson = lesson - image.img = ImageObject.objects.get(id=c['data']['img']) + image.img = ImageObject.objects.get(id=cdata['img']) image.save() else: image = Image.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], lesson=lesson, - img=ImageObject.objects.get(id=c['data']['img']), + img=ImageObject.objects.get(id=cdata['img']), ) - elif c['type'] == 'image-text': - if 'id' in c['data'] and c['data']['id']: - it = ImageText.objects.get(id=c['data']['id']) - it.position = c['data']['position'] - it.title = c['data']['title'] + elif ctype == 'image-text': + if 'id' in cdata and cdata['id']: + it = ImageText.objects.get(id=cdata['id']) + it.position = cdata['position'] + it.title = cdata['title'] it.lesson = lesson - it.img = ImageObject.objects.get(id=c['data']['img']) - it.txt = c['data']['txt'] + it.img = ImageObject.objects.get(id=cdata['img']) + it.txt = cdata['txt'] it.save() else: it = ImageText.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], lesson=lesson, - img=ImageObject.objects.get(id=c['data']['img']), - txt=c['data']['txt'], + img=ImageObject.objects.get(id=cdata['img']), + txt=cdata['txt'], ) - elif c['type'] == 'video': - if 'id' in c['data'] and c['data']['id']: - v = Video.objects.get(id=c['data']['id']) - v.position = c['data']['position'] - v.title = c['data']['title'] + elif ctype == 'video': + if 'id' in cdata and cdata['id']: + v = Video.objects.get(id=cdata['id']) + v.position = cdata['position'] + v.title = cdata['title'] v.lesson = lesson - v.url = c['data']['url'] + v.url = cdata['url'] v.save() else: v = Video.objects.create( - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], lesson=lesson, - url=c['data']['url'], + url=cdata['url'], ) - elif c['type'] == 'images': - if 'id' in c['data'] and c['data']['id']: - g = Gallery.objects.get(id=c['data']['id']) - g.position = c['data']['position'] - g.title = c['data']['title'] + elif ctype == 'images': + if 'id' in cdata and cdata['id']: + g = Gallery.objects.get(id=cdata['id']) + g.position = cdata['position'] + g.title = cdata['title'] g.lesson = lesson g.save() - if 'images' in c['data']: - for image in c['data']['images']: + if 'images' in cdata: + for image in cdata['images']: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']), @@ -375,11 +386,11 @@ class LessonCreateSerializer(serializers.ModelSerializer): else: g = Gallery.objects.create( lesson=lesson, - position=c['data']['position'], - title=c['data']['title'], + position=cdata['position'], + title=cdata['title'], ) - if 'images' in c['data']: - for image in c['data']['images']: + if 'images' in cdata: + for image in cdata['images']: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']),