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.
100 lines
2.5 KiB
100 lines
2.5 KiB
from rest_framework import serializers
|
|
|
|
from courses.models import Course, Lesson, Topic
|
|
|
|
|
|
class TopicSerializer(serializers.ModelSerializer):
|
|
children = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Topic
|
|
fields = '__all__'
|
|
|
|
@staticmethod
|
|
def get_children(self):
|
|
return [MiniLessonSerializer(i).data for i in self.lesson_set.all()]
|
|
|
|
|
|
class MiniLessonSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = Lesson
|
|
fields = ('title', 'free', 'token', 'is_hm')
|
|
|
|
|
|
class LessonSerializer(MiniLessonSerializer):
|
|
course_slug = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Lesson
|
|
exclude = ('id', 'topic', 'key')
|
|
|
|
@staticmethod
|
|
def get_course_slug(self):
|
|
return self.topic.course.slug
|
|
|
|
|
|
class TeacherLessonSerializer(MiniLessonSerializer):
|
|
topic_sort = serializers.SerializerMethodField()
|
|
topic_title = serializers.SerializerMethodField()
|
|
course_title = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Lesson
|
|
fields = ('topic_sort', 'description', 'title', 'course_title', 'token', 'topic_title')
|
|
|
|
@staticmethod
|
|
def get_topic_sort(self):
|
|
for topic_idx, topic in enumerate(self.topic.course.topic_set.all()):
|
|
if topic == self.topic:
|
|
return topic_idx + 1
|
|
return None
|
|
|
|
@staticmethod
|
|
def get_topic_title(self):
|
|
return self.topic.title
|
|
|
|
@staticmethod
|
|
def get_course_title(self):
|
|
return self.topic.course.title
|
|
|
|
|
|
class CourseInitSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = Course
|
|
fields = ['title', 'slug']
|
|
|
|
|
|
class CourseTreeSerializer(serializers.ModelSerializer):
|
|
tree = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Course
|
|
fields = ('tree', '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 = ('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()
|
|
|