from rest_framework import serializers import json # from django.contrib.auth import get_user_model # from django.core.exceptions import ObjectDoesNotExist from courses.models import Course, Vertex, Tutorial, Topic, Task, NormalMap class TutorialSerializer(serializers.ModelSerializer): class Meta: model = Tutorial exclude = ['id'] class TaskSerializer(serializers.ModelSerializer): class Meta: model = Task exclude = ['id'] 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 = ('id', 'title', 'type', 'object', "description") @staticmethod def get_object(self): if self.content_type.model == 'tutorial': return TutorialSerializer(self.content_object).data if self.content_type.model == 'task': return TaskSerializer(self.content_object).data return False class CourseListSerializer(serializers.ModelSerializer): statistic = serializers.SerializerMethodField() level = serializers.SerializerMethodField() direction = serializers.SerializerMethodField() class Meta: model = Course fields = ['id', 'title', 'statistic', '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.direction.title class CourseTreeSerializer(serializers.ModelSerializer): children = serializers.SerializerMethodField() class Meta: model = Course fields = ['id', 'children'] @staticmethod def get_children(self): return self.get_tree(MiniVertexSerializer) class CourseDetailSerializer(serializers.ModelSerializer): level = serializers.SerializerMethodField() direction = serializers.SerializerMethodField() teachers = serializers.SerializerMethodField() class Meta: model = Course exclude = ( 'slug', 'mentors', 'page', 'sort', 'preview', 'use_fail', 'basic_len', 'addition_len', 'min_price', 'buy_icon', 'must_build', 'keywords', 'recommend', ) @staticmethod def get_level(self): return self.get_level_display() @staticmethod def get_direction(self): return self.direction.title @staticmethod def get_teachers(self): return [teacher.full_name() for teacher in self.teachers.all()]