from rest_framework import serializers from course_service.courses.models import Course, Vertex, Topic from course_service.maps.serializers import CourseRouteSerializer class TopicSerializer(serializers.ModelSerializer): children = serializers.SerializerMethodField() class Meta: model = Topic exclude = ['id'] @staticmethod def get_children(self): return [MiniVertexSerializer(i).data for i in self.vertex_set.all()] class MiniVertexSerializer(serializers.ModelSerializer): class Meta: model = Vertex fields = ('id', 'title', 'free') class VertexSerializer(MiniVertexSerializer): class Meta: model = Vertex fields = '__all__' class CourseInitSerializer(serializers.ModelSerializer): class Meta: model = Course fields = ['title', 'slug'] class CourseTreeSerializer(serializers.ModelSerializer): tree = serializers.SerializerMethodField() route = serializers.SerializerMethodField() class Meta: model = Course fields = ('tree', 'route', 'slug') @staticmethod def get_tree(self): return [TopicSerializer(i).data for i in self.topic_set.all()] @staticmethod def get_route(self): return CourseRouteSerializer(self.route).data class CourseDetailSerializer(serializers.ModelSerializer): level = serializers.SerializerMethodField() direction = serializers.SerializerMethodField() statistic = serializers.SerializerMethodField() class Meta: model = Course exclude = ('route', 'id') @staticmethod def get_level(self): return self.get_level_display() @staticmethod def get_direction(self): return self.get_direction_display() @staticmethod def get_statistic(self): return self.get_statistic()