|
|
|
@ -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 |
|
|
|
|
|
|
|
|
|
|
|
|