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.
 
 
 
 
 
 

86 lines
2.1 KiB

from rest_framework import serializers
from course_service.courses.models import Course, Vertex, Topic
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 = '__all__'
class CourseInitSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = ['title', 'slug']
class CourseListSerializer(serializers.ModelSerializer):
statistic = serializers.SerializerMethodField()
level = serializers.SerializerMethodField()
direction = serializers.SerializerMethodField()
class Meta:
model = Course
fields = ['id', 'title', 'statistic', 'public', 'hidden',
'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.get_direction_display()
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.get_direction_display()
@staticmethod
def get_teachers(self):
return [teacher.email for teacher in self.teachers.all()]