from rest_framework import serializers from courses.models import Course, Vertex, Topic class TopicSerializer(serializers.ModelSerializer): class Meta: model = Topic exclude = ['id'] class MiniVertexSerializer(serializers.ModelSerializer): object = serializers.SerializerMethodField() type = serializers.SerializerMethodField() class Meta: model = Vertex fields = ('id', 'title', 'type', 'object', 'free') @staticmethod def get_object(self): if self.content_type.model == 'topic': return TopicSerializer(self.content_object).data return False @staticmethod def get_type(self): return self.content_type.model class VertexSerializer(MiniVertexSerializer): class Meta: model = Vertex fields = '__all__' class CourseInitSerializer(serializers.ModelSerializer): class Meta: model = Course fields = ['title', 'slug'] class CourseListSerializer(serializers.ModelSerializer): statistic = serializers.SerializerMethodField() level = serializers.SerializerMethodField() direction = serializers.SerializerMethodField() class Meta: model = Course fields = ['id', 'title', 'statistic', 'public', 'hidden', 'level', 'direction', 'image', 'slug'] @staticmethod def get_statistic(self): return self.get_statistic() @staticmethod def get_level(self): return self.get_level_display() @staticmethod def get_direction(self): return self.get_direction_display() class CourseDetailSerializer(serializers.ModelSerializer): level = serializers.SerializerMethodField() direction = serializers.SerializerMethodField() teachers = serializers.SerializerMethodField() class Meta: model = Course fields = '__all__' @staticmethod def get_level(self): return self.get_level_display() @staticmethod def get_direction(self): return self.get_direction_display() @staticmethod def get_teachers(self): return [teacher.email for teacher in self.teachers.all()]