diff --git a/apps/course/views/course.py b/apps/course/views/course.py index 3b245a6..e268c76 100644 --- a/apps/course/views/course.py +++ b/apps/course/views/course.py @@ -33,15 +33,6 @@ class CourseListAPIView(ListAPIView): filter_backends = [SearchFilter] search_fields = ['title', 'category__name', 'professor__fullname'] - def get_queryset(self): - """ - Optimized queryset with select_related for ForeignKey relationships - """ - return Course.objects.select_related( - 'category', - 'professor' - ).exclude(status=Course.StatusChoices.INACTIVE) - @swagger_auto_schema( operation_description=doc_course_list(), manual_parameters=[ @@ -59,7 +50,7 @@ class CourseListAPIView(ListAPIView): openapi.Parameter( 'status', openapi.IN_QUERY, type=openapi.TYPE_STRING, - description="""Status => + description="""Status => Upcoming (visible but registration not allowed)---Предстоящие Registering (registration is open)---регистрация Ongoing (course has started, registration closed)---Впроцессе @@ -79,13 +70,20 @@ class CourseListAPIView(ListAPIView): ), ]) def get(self, request, *args, **kwargs): - return super().get(request, *args, **kwargs) - + return super().get(request, *args, **kwargs) + def get_queryset(self): - queryset = super().get_queryset() + """ + Optimized queryset with select_related for ForeignKey relationships and filtering + """ + queryset = Course.objects.select_related( + 'category', + 'professor' + ).exclude(status=Course.StatusChoices.INACTIVE) + request = self.request filters = request.query_params - + # Handle category_slug with multiple values separated by commas if category_slugs := filters.get('category_slug'): category_slugs_list = category_slugs.split(',') @@ -95,7 +93,7 @@ class CourseListAPIView(ListAPIView): if statuses := filters.get('status'): statuses_list = statuses.split(',') queryset = queryset.filter(status__in=statuses_list) - + if is_free := filters.get('is_free'): is_free = is_free.lower() == 'true' queryset = queryset.filter( @@ -104,7 +102,7 @@ class CourseListAPIView(ListAPIView): if is_online := filters.get('is_online'): is_online = is_online.lower() == 'true' queryset = queryset.filter(is_online=is_online) - + return queryset