LIL-276. Add courses category bulk change endpoint.

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent b68bdffe75
commit bc1438721c
  1. 8
      api/v1/serializers/course.py
  2. 27
      api/v1/views.py

@ -72,6 +72,14 @@ class CategorySerializer(serializers.ModelSerializer):
)
class CourseBulkChangeCategorySerializer(serializers.Serializer):
category = serializers.IntegerField()
courses = serializers.ListField(
child=serializers.IntegerField(),
min_length=1,
)
class CourseCreateSerializer(DispatchContentMixin,
DispatchGalleryMixin,
DispatchMaterialMixin,

@ -10,6 +10,7 @@ from . import ExtendedModelViewSet
from .serializers.course import (
CategorySerializer, LikeSerializer,
CourseSerializer, CourseCreateSerializer,
CourseBulkChangeCategorySerializer,
MaterialSerializer, MaterialCreateSerializer,
LessonSerializer, LessonCreateSerializer,
)
@ -82,6 +83,7 @@ class CourseViewSet(ExtendedModelViewSet):
'list': CourseSerializer,
'retrieve': CourseSerializer,
'draft': CourseSerializer,
'change_category_bulk': CourseBulkChangeCategorySerializer,
}
filter_fields = ('category', 'status', 'is_infinite', 'is_featured',)
search_fields = ('author__email', 'title', 'category__title',)
@ -99,6 +101,31 @@ class CourseViewSet(ExtendedModelViewSet):
serialized_data = serializer(instance=drafts.last())
return Response(serialized_data.data)
@list_route(methods=['patch'], url_path='change-category-bulk')
def change_category_bulk(self, request):
serializer_class = self.get_serializer_class()
serializer = serializer_class(data=request.data)
if serializer.is_valid():
category_id = serializer.validated_data['category']
courses_ids = serializer.validated_data['courses']
try:
category = Category.objects.get(id=category_id)
except Category.DoesNotExist:
return Response(
{'success': False, 'detail': f'Category with id {category_id} not found'},
status=status.HTTP_400_BAD_REQUEST,
)
else:
c = Course.objects.filter(
id__in=courses_ids,
).update(category=category)
return Response({'success': True})
else:
return Response(
{'success': False},
status=status.HTTP_400_BAD_REQUEST,
)
class LessonViewSet(ExtendedModelViewSet):
queryset = Lesson.objects.select_related(

Loading…
Cancel
Save