You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
1.7 KiB

from rest_framework import serializers
from courses.models import Course, Lesson, Topic
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 = Lesson
fields = ('title', 'free', 'token')
class VertexSerializer(MiniVertexSerializer):
valid_type = serializers.SerializerMethodField()
class Meta:
model = Lesson
exclude = ('id', 'topic', 'free')
@staticmethod
def get_valid_type(self):
return self.get_valid_type_display()
class CourseInitSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = ['title', 'slug']
class CourseTreeSerializer(serializers.ModelSerializer):
tree = 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()]
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()