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.
111 lines
2.8 KiB
111 lines
2.8 KiB
from rest_framework import serializers
|
|
|
|
from courses.models import Course, Vertex, Tutorial, Topic, Task
|
|
|
|
|
|
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
|
|
fields = '__all__'
|
|
|
|
@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.get_full_name() for teacher in self.teachers.all()]
|
|
|