From 4eaeea9243fcb8d56e9c5bc1c2f75bd43e7d4797 Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Fri, 9 Feb 2018 17:03:56 +0300 Subject: [PATCH 1/3] Fix errors --- api/v1/serializers/content.py | 12 ++++++++++++ api/v1/serializers/course.py | 27 ++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) 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': From 299151474e5c88eb84db0e582562e606681d8ed6 Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Fri, 9 Feb 2018 17:37:07 +0300 Subject: [PATCH 2/3] Fix django.db.utils.DataError: value too long for type character varying(100) --- api/v1/serializers/content.py | 1 - apps/course/models.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/api/v1/serializers/content.py b/api/v1/serializers/content.py index 6c352aa2..cdaa5351 100644 --- a/api/v1/serializers/content.py +++ b/api/v1/serializers/content.py @@ -19,7 +19,6 @@ class ContentCreateSerializer(serializers.Serializer): 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): diff --git a/apps/course/models.py b/apps/course/models.py index 69eff32b..6e430569 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -77,7 +77,7 @@ class Course(models.Model): def save(self, *args, **kwargs): if not self.slug: self.slug = slugify( - self.title[:100], + self.title[:90], allow_unicode=True ) From 2686c27022b94944fd2122e3e8ae1ef92e5fe221 Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Fri, 9 Feb 2018 17:39:02 +0300 Subject: [PATCH 3/3] Exclude self in Course save --- apps/course/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/course/models.py b/apps/course/models.py index 6e430569..efca4682 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -81,7 +81,7 @@ class Course(models.Model): allow_unicode=True ) - if Course.objects.filter(slug=self.slug).exists(): + if Course.objects.filter(slug=self.slug).exclude(id=self.id).exists(): self.slug += '_' + str(uuid4())[:6] return super().save()