diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 551830ad..781af25e 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -1,9 +1,8 @@ +from django.contrib.auth import get_user_model from ipware import get_client_ip - from rest_framework import serializers from rest_framework.validators import UniqueValidator - -from django.contrib.auth import get_user_model +from drf_dynamic_fields import DynamicFieldsMixin from apps.course.models import ( Category, Course, @@ -13,17 +12,9 @@ from apps.course.models import ( LiveLessonComment) from .content import ( ImageObjectSerializer, ContentSerializer, ContentCreateSerializer, - GallerySerializer, GalleryImageSerializer, -) - -from apps.content.models import ( - Content, Image, Text, ImageText, Video, - Gallery, GalleryImage, ImageObject, - ContestWork) - -from .user import UserSerializer + GallerySerializer, ) from .mixins import DispatchContentMixin, DispatchGalleryMixin, DispatchMaterialMixin - +from .user import UserSerializer User = get_user_model() @@ -269,7 +260,7 @@ class LessonSerializer(serializers.ModelSerializer): ) -class CourseSerializer(serializers.ModelSerializer): +class CourseSerializer(DynamicFieldsMixin, serializers.ModelSerializer): author = UserSerializer() category = CategorySerializer() materials = MaterialSerializer(many=True) diff --git a/api/v1/views.py b/api/v1/views.py index f792972b..744ab371 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -18,7 +18,7 @@ from .serializers.course import ( MaterialSerializer, MaterialCreateSerializer, LessonSerializer, LessonCreateSerializer, LikeCreateSerializer, CourseCommentSerializer, LessonCommentSerializer, - LiveLessonCommentSerializer) + LiveLessonCommentSerializer,) from .serializers.content import ( BanerSerializer, ImageSerializer, ImageCreateSerializer, @@ -36,8 +36,7 @@ from .serializers.school import ( ) from .serializers.payment import ( AuthorBalanceSerializer, AuthorBalanceCreateSerializer, - PaymentSerializer, CoursePaymentSerializer, - SchoolPaymentSerializer, + PaymentSerializer, CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer) from .serializers.user import ( AuthorRequestSerializer, @@ -48,7 +47,7 @@ from .serializers.contest import ( ) from .permissions import ( - IsAdmin, IsAdminOrIsSelf, + IsAdmin, IsAuthorOrAdmin, IsAuthorObjectOrAdmin, IsTeacherOrAdmin, ) @@ -240,6 +239,20 @@ class CourseViewSet(ExtendedModelViewSet): # 'delete': IsAdmin, # } + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + + if request.query_params.get('page'): + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + else: + return Response({'results': []}) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + @list_route(methods=['get']) def draft(self, request): drafts = Course.objects.filter(author=request.user, status=Course.DRAFT) diff --git a/requirements.txt b/requirements.txt index 052bb32e..27daa65a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,3 +33,4 @@ django-imagekit pusher==2.0.1 short_url sendgrid +drf_dynamic_fields