75 lines
2.4 KiB
Python
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="考试编号") |