from rest_framework import serializers from vbv_lernwelt.course.models import ( Course, CourseCategory, CourseCompletion, CourseSession, CourseSessionUser, ) from vbv_lernwelt.learnpath.models import Circle class CourseSerializer(serializers.ModelSerializer): class Meta: model = Course fields = ["id", "title", "category_name"] class CourseCategorySerializer(serializers.ModelSerializer): class Meta: model = CourseCategory fields = [ "id", "title", "general", ] class CourseCompletionSerializer(serializers.ModelSerializer): class Meta: model = CourseCompletion fields = [ "id", "created_at", "updated_at", "user", "page_key", "page_type", "page_slug", "course", "completion_status", "additional_json_data", ] class CourseSessionSerializer(serializers.ModelSerializer): learning_path_url = serializers.SerializerMethodField() competence_url = serializers.SerializerMethodField() media_library_url = serializers.SerializerMethodField() course = serializers.SerializerMethodField() experts = serializers.SerializerMethodField() def get_course(self, obj): return CourseSerializer(obj.course).data def get_learning_path_url(self, obj): return obj.course.get_learning_path_url() def get_media_library_url(self, obj): return obj.course.get_media_library_url() def get_competence_url(self, obj): return obj.course.get_competence_url() def get_experts(self, obj): expert_relations = CourseSessionUser.objects.filter( expert__in=Circle.objects.descendant_of(obj.course.coursepage) ) expert_result = [] for er in expert_relations: for circle in er.expert.all(): expert_result.append( { "user_id": er.user.id, "circle_id": circle.id, "circle_translation_key": circle.translation_key, } ) return expert_result class Meta: model = CourseSession fields = [ "id", "created_at", "updated_at", "course", "title", "start_date", "end_date", "additional_json_data", "learning_path_url", "competence_url", "media_library_url", "experts", ]