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.
 
 
 
 
 
 

112 lines
2.9 KiB

from rest_framework import serializers
from django.conf import settings
from courses.models import Course, Lesson, Topic
import os
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', 'sort')
class LessonSerializer(MiniLessonSerializer):
course_slug = serializers.SerializerMethodField()
materials = serializers.SerializerMethodField()
class Meta:
model = Lesson
exclude = ('id', 'topic', 'key')
@staticmethod
def get_course_slug(self):
return self.topic.course.slug
@staticmethod
def get_materials(self):
try:
prefix = 'materials/%s/%s/%s' % (self.topic.course.token, self.topic.id, self.token)
name_list = os.listdir('%s/%s/' % (settings.MEDIA_ROOT, prefix))
return ["%s%s/%s" % (settings.MEDIA_URL, prefix, i) for i in name_list]
except FileNotFoundError:
return []
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()