class ClassroomSerializer(Serializer): id = IntField(required=True) name = StrField(required=True) date_start = StrField(required=True) date_end = StrField(required=True) class_code = StrField(required=True) teacher = MethodField("serialize_teacher") students = MethodField("serialize_students") modules = MethodField("serialize_modules") def serialize_teacher(self, classroom): if not classroom.teacher: return {} return {"id": classroom.teacher_id} def serialize_students(self, classroom): if not classroom.students: return [] return student_schemas.StudentRelSerializer(classroom.students, many=True).data def serialize_modules(self, classroom): if not classroom.modules: return [] return [("id", module.id) for module in classroom.modules]
class TopicSerializer(Serializer): id = IntField(required=True) name = StrField(required=True) description = StrField(required=True) image = StrField(required=True) modules = MethodField("module_serializer") def module_serializer(self, topic): if not topic.modules: return [] return [{"id": module.id} for module in topic.modules]
class UserSerializer(Serializer): id = IntField(required=True) name = StrField(required=True) email = StrField(required=True) github_username = StrField(required=True) image = StrField(required=True) global_gems = IntField(required=True) last_seen = MethodField("serialize_last_seen") def serialize_last_seen(self, user): if not user.last_seen: return None return user.last_seen.isoformat()
class SchoolSerializer(Serializer): name = StrField(required=True) emp_percent = FloatField(required=True) big_law = FloatField(required=True) small_law = FloatField(required=True) public_service = FloatField(required=True) clerkships = FloatField(required=True) unemp_percent = FloatField(required=True) debt = FloatField(required=True) attrition = FloatField(required=True) prestige = FloatField(required=True)
class MetaSerializer(Serializer): id = IntField(required=True, label="meta_id") roles = StrField(required=True) user_id = MethodField("serialize_user") student_id = MethodField("serialize_student") teacher_id = MethodField("serialize_teacher") def serialize_user(self, meta): if not meta.user: return None return meta.user.id def serialize_student(self, meta): if not meta.student: return None return meta.student.id def serialize_teacher(self, meta): if not meta.teacher: return None return meta.teacher.id
class ModuleRelSerializer(Serializer): id = IntField(required=True) name = StrField(required=True)
class ArtistSerializer(Serializer): artist = StrField(required=True, attr="name") works = WorkSerializer(required=True, many=True) total_value = Field(required=True, label="totalValue")
class CheckpointProgressSerializer(Serializer): checkpoint = CheckpointRelSerializer() content = StrField(required=False) student_comment = StrField(required=False)
class WorkSerializer(Serializer): name = StrField(required=True) currency = StrField(required=True) price = StrField(required=True)
class PictureSerializer(Serializer): fields = ( 'id', 'game', 'title', 'link', 'size', 'type', 'usetype', 'taglevel1', 'taglevel2', 'taglevel3', 'created_time', 'quin_tag', 'pic_type', 'badge', 'extend_data') # id = IntField(attr='id') title = MethodField() link = MethodField() taglevel1 = MethodField() taglevel2 = MethodField() taglevel3 = MethodField() created_time = MethodField() # size = IntField(attr='_id') type = MethodField() usetype = MethodField() # game = IntField(attr='_id') # pic_type = IntField(attr='_id') extend_data = StrField(required=True) badge = MethodField() quin_tag = MethodField() async def get_mongo_Badge(self,id): return await Badge.objects.filter(id=id).find_all()[0] def get_quin_category(self, instance): if instance.category: return {"category_id": instance.category.id, "category_name": instance.category.name} return None def get_quin_high_category(self, instance): if instance.category: if instance.category.high: return {"high_id": instance.category.high.id, "high_name": instance.category.high.name} return None def get_created_time(self, obj): return obj.created_time.strftime("%Y-%m-%d %H:%M:%S") def get_badge(self, obj): if obj.badge == "0": return "" else: try: return Badge.objects.filter(id=obj.id).find_all()[0] except Exception: return "" def get_id(self, obj): return str(obj.id) def get_title(self, obj): return obj.title def get_link(self, obj): if obj.usetype == 1: # 查一下 应该是1 return '%s%s%s' % (PIC_CDN_BROWSE, obj.content.startswith('/') and obj.content or '/%s' % obj.content, PLAY_BGP_CSS) else: return '%s%s%s' % (PIC_CDN_BROWSE, obj.content.startswith('/') and obj.content or '/%s' % obj.content, PLAY_ROLE_CSS) def get_type(self, obj): return ('webp', 'jpg', 'png', 'gif', 'bmp',)[obj.filetype] def get_usetype(self, obj): return ('bgp', 'role', "avatar", "item")[obj.usetype] def get_taglevel1(self, obj): if obj.taglevel1 > 0: taginfo = {} tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel1).get() taginfo["id"] = tag.id taginfo["name"] = tag.name return taginfo else: return None def get_taglevel2(self, obj): if obj.taglevel2 > 0: taginfo = {} tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel2).get() taginfo["id"] = tag.id taginfo["name"] = tag.name return taginfo else: return None def get_taglevel3(self, obj): if obj.taglevel3 > 0: taginfo = {} tag = GameMediatag.select().where(GameMediatag.id == obj.taglevel3).get() taginfo["id"] = tag.id taginfo["name"] = tag.name return taginfo else: return None def get_quin_tag(self, instance): result = [] if instance.quin_tag: for tag in instance.quin_tag: try: tag = GameQuintag.select().where(GameQuintag.id == tag).get() except GameQuintag.DoesNotExist: continue tag_dict = { "id": tag.id, "name": tag.name, "category": None, "high": None} if tag.category: tag_dict["category"] = { "id": tag.category.id, "name": tag.category.name} if tag.category.high: tag_dict["high"] = { "id": tag.category.high.id, "name": tag.category.high.name} result.append(tag_dict) return result