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.
 
 
 
 
 
 

127 lines
3.4 KiB

from rest_framework import serializers
import json
# from django.contrib.auth import get_user_model
# from django.core.exceptions import ObjectDoesNotExist
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()
children = serializers.SerializerMethodField()
class Meta:
model = Vertex
fields = ('id', 'title', 'type', 'object', 'children')
@staticmethod
def get_object(self):
if self.content_type.model == 'tutorial':
return TutorialSerializer(self.content_object).data
elif self.content_type.model == 'topic':
return TopicSerializer(self.content_object).data
elif self.content_type.model == 'task':
return TaskSerializer(self.content_object).data
@staticmethod
def get_type(self):
return self.content_type.model
@staticmethod
def get_children(self):
return json.loads(self.sort_map.dependent_elements)
class VertexSerializer(MiniVertexSerializer):
class Meta:
model = Vertex
fields = ('id', 'title', 'type', 'object', 'children', 'description')
@staticmethod
def get_children(self):
return [VertexSerializer(Vertex.manager.get(id=i)).data
for i in json.loads(self.sort_map.dependent_elements)]
class CourseListSerializer(serializers.ModelSerializer):
length = serializers.SerializerMethodField()
level = serializers.SerializerMethodField()
direction = serializers.SerializerMethodField()
class Meta:
model = Course
fields = ['id', 'title', 'length',
'level', 'direction', 'image', ]
@staticmethod
def get_length(self):
return 15
@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 [MiniVertexSerializer(Vertex.manager.get(id=i)).data
for i in json.loads(self.sort_map.dependent_elements)]
class CourseDetailSerializer(serializers.ModelSerializer):
level = serializers.SerializerMethodField()
direction = serializers.SerializerMethodField()
teachers = serializers.SerializerMethodField()
class Meta:
model = Course
exclude = (
'slug', 'mentors', 'page', 'sort',
'preview', 'use_fail', 'basic_len',
'addition_len', 'min_price', 'buy_icon',
'must_build', 'keywords', 'recommend',
)
@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.full_name() for teacher in self.teachers.all()]