cma_search_old/server/apps/exam/serializers.py

75 lines
2.4 KiB
Python

from rest_framework.serializers import ModelSerializer, CharField, Serializer, SerializerMethodField, FloatField
from rest_framework import serializers
from apps.exam.models import Question, Questioncat, Paper, Exam, PaperQuestion
class QuestioncatSerializer(ModelSerializer):
class Meta:
model = Questioncat
fields = '__all__'
class QuestionSerializer(ModelSerializer):
class Meta:
model = Question
fields = '__all__'
class PaperSerializer(ModelSerializer):
class Meta:
model = Paper
exclude = ('questions',)
class QuestionReadSerializer(ModelSerializer):
class Meta:
model = Question
exclude = ['right']
class PaperQuestionSerializer(Serializer):
id = CharField(label='题目ID')
total_score = FloatField(label='单题满分')
class PaperCreateUpdateSerializer(ModelSerializer):
questions_ = PaperQuestionSerializer(many=True)
class Meta:
model = Paper
fields = '__all__'
class PaperQuestionDetailSerializer(ModelSerializer):
id = serializers.IntegerField(source='question.id')
name = serializers.ReadOnlyField(source='question.name')
options = serializers.ReadOnlyField(source='question.options')
right = serializers.ReadOnlyField(source='question.right')
type = serializers.ReadOnlyField(source='question.type')
img = serializers.ReadOnlyField(source='question.img')
questioncat_name = serializers.ReadOnlyField(source='question.questioncat.name')
level = serializers.ReadOnlyField(source='question.level')
class Meta:
model = PaperQuestion
fields = ('id','name','options','right','type','level','total_score','questioncat_name', 'img')
class PaperDetailSerializer(ModelSerializer):
questions_ = SerializerMethodField()
class Meta:
model = Paper
fields = '__all__'
def get_questions_(self, instance):
pqs = PaperQuestion.objects.filter(paper=instance)
return PaperQuestionDetailSerializer(pqs, many=True).data
class ExamCreateUpdateSerializer(ModelSerializer):
class Meta:
model = Exam
fields = ['name', 'place', 'open_time', 'close_time', 'proctor_name', 'proctor_phone']
class ExamListSerializer(ModelSerializer):
create_by_name = CharField(source='create_by.name', read_only=True)
class Meta:
model = Exam
fields = '__all__'
class ExamAttendSerializer(Serializer):
code = CharField(label="考试编号")