diff --git a/api/v1/serializers/content.py b/api/v1/serializers/content.py index e98faee2..6c352aa2 100644 --- a/api/v1/serializers/content.py +++ b/api/v1/serializers/content.py @@ -18,6 +18,18 @@ class ContentCreateSerializer(serializers.Serializer): type = serializers.ChoiceField(choices=TYPE_CHOICES) data = serializers.JSONField() + def to_representation(self, obj): + print(obj) + if isinstance(obj, Image): + return ImageSerializer(obj, context=self.context).to_representation(obj) + elif isinstance(obj, Text): + return TextSerializer(obj, context=self.context).to_representation(obj) + elif isinstance(obj, ImageText): + return ImageTextSerializer(obj, context=self.context).to_representation(obj) + elif isinstance(obj, Video): + return VideoSerializer(obj, context=self.context).to_representation(obj) + return super(ContentSerializer, self).to_representation(obj) + class ImageObjectSerializer(serializers.ModelSerializer): image = Base64ImageField( diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index d348ce64..f0aadbee 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -7,6 +7,11 @@ from .content import ( GallerySerializer, GalleryImageSerializer, ) +from apps.content.models import ( + Content, Image, Text, ImageText, Video, + Gallery, GalleryImage, ImageObject, +) + class MaterialCreateSerializer(serializers.ModelSerializer): @@ -29,7 +34,7 @@ class MaterialCreateSerializer(serializers.ModelSerializer): class MaterialSerializer(MaterialCreateSerializer): - cover = ImageObjectSerializer() + cover = ImageObjectSerializer(allow_null=True) class LikeSerializer(serializers.ModelSerializer): @@ -130,14 +135,14 @@ class CourseCreateSerializer(serializers.ModelSerializer): i.position = c['data']['position'] i.title = c['data']['title'] i.course = course - i.img = Image.objects.get(c['data']['img']) + i.img = ImageObject.objects.get(id=c['data']['img']['id']) i.save() else: i = Image.objects.create( position=c['data']['position'], title=c['data']['title'], course=course, - img=Image.objects.get(c['data']['img']), + img=Image.objects.get(id=c['data']['img']['id']), ) elif c['type'] == 'image-text': if 'id' in c['data']: @@ -145,7 +150,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): it.position = c['data']['position'] it.title = c['data']['title'] it.course = course - it.img = Image.objects.get(c['data']['img']) + it.img = ImageObject.objects.get(id=c['data']['img']['id']) it.txt = c['data']['txt'] it.save() else: @@ -153,7 +158,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): position=c['data']['position'], title=c['data']['title'], course=course, - img=Image.objects.get(c['data']['img']), + img=Image.objects.get(id=c['data']['img']['id']), txt=c['data']['txt'], ) elif c['type'] == 'video': @@ -187,8 +192,8 @@ class CourseCreateSerializer(serializers.ModelSerializer): return course def update(self, instance, validated_data): - materials = validated_data.pop('materials') - content = validated_data.pop('content') + materials = validated_data.pop('materials', []) + content = validated_data.pop('content', []) course = super().update(instance, validated_data) @@ -214,14 +219,14 @@ class CourseCreateSerializer(serializers.ModelSerializer): i.position = c['data']['position'] i.title = c['data']['title'] i.course = course - i.img = Image.objects.get(c['data']['img']) + i.img = Image.objects.get(id=c['data']['img']['id']) i.save() else: i = Image.objects.create( position=c['data']['position'], title=c['data']['title'], course=course, - img=Image.objects.get(c['data']['img']), + img=Image.objects.get(id=c['data']['img']['id']), ) elif c['type'] == 'imagetext': if 'id' in c['data']: @@ -229,7 +234,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): it.position = c['data']['position'] it.title = c['data']['title'] it.course = course - it.img = Image.objects.get(c['data']['img']) + it.img = Image.objects.get(id=c['data']['img']['id']) it.txt = c['data']['txt'] it.save() else: @@ -237,7 +242,7 @@ class CourseCreateSerializer(serializers.ModelSerializer): position=c['data']['position'], title=c['data']['title'], course=course, - img=Image.objects.get(c['data']['img']), + img=Image.objects.get(id=c['data']['img']['id']), txt=c['data']['txt'], ) elif c['type'] == 'video':