diff --git a/apps/course/serializers/course.py b/apps/course/serializers/course.py index 6f5bbfa..a12a266 100644 --- a/apps/course/serializers/course.py +++ b/apps/course/serializers/course.py @@ -234,7 +234,10 @@ class CourseDetailSerializer(serializers.ModelSerializer): if student := self._get_authenticated_user(): if not self._is_participant(student, obj): return None - return self._get_completed_lessons_count(student, obj) + completed_count = self._get_completed_lessons_count(student, obj) + # Ensure completed count doesn't exceed total lessons count + total_lessons = self.get_lessons_count(obj) + return min(completed_count, total_lessons) return None def _is_participant(self, student, course): @@ -296,10 +299,11 @@ class CourseDetailSerializer(serializers.ModelSerializer): class MyCourseListSerializer(serializers.ModelSerializer): category = CourseCategorySerializer() thumbnail = serializers.SerializerMethodField() + lessons_count = serializers.SerializerMethodField() lessons_complated_count = serializers.SerializerMethodField() class Meta: - model = Course + model = Course fields = [ 'id', 'title', @@ -314,12 +318,25 @@ class MyCourseListSerializer(serializers.ModelSerializer): def get_thumbnail(self, obj): return get_thumbs(obj.thumbnail, self.context.get('request')) - + + def get_lessons_count(self, obj): + """Get the actual count of active lessons""" + # Use prefetched lessons if available + if hasattr(obj, 'lessons') and obj.lessons.all(): + lessons_count = sum(1 for lesson in obj.lessons.all() if lesson.is_active) + return max(lessons_count, obj.lessons_count) + # Fallback to direct query + lessons_count = obj.lessons.filter(is_active=True).count() + return max(lessons_count, obj.lessons_count) + def get_lessons_complated_count(self, obj): if student := self._get_authenticated_user(): if not self._is_participant(student, obj): return None - return self._get_completed_lessons_count(student, obj) + completed_count = self._get_completed_lessons_count(student, obj) + # Ensure completed count doesn't exceed total lessons count + total_lessons = self.get_lessons_count(obj) + return min(completed_count, total_lessons) return None def _is_participant(self, student, course):