# coding=utf-8 from rest_framework import serializers from .models import Exam, ExamLog from utils.exceptions import CustomError class ExamSerializer(serializers.ModelSerializer): subject_name = serializers.CharField(source='subject.name', read_only=True) type_text = serializers.CharField(source='get_type_display', read_only=True) create_user_text = serializers.CharField(source='create_user.username', read_only=True) question_total_scores = serializers.IntegerField(source='exampaper.question_total_scores', read_only=True) passline = serializers.IntegerField(source='exampaper.passline', read_only=True) exampaper_name = serializers.CharField(source='exampaper.name', read_only=True) examinee_name = serializers.SerializerMethodField() class Meta: model = Exam fields = "__all__" def get_examinee_name(self, obj): examinees = ExamLog.objects.filter(exam=obj, delete=False).values('user__username') examinee_list = [item['user__username'] for item in examinees] if examinee_list: return ','.join(examinee_list) return '' def create(self, validated_data): validated_data['create_user'] = self.context['request'].user instance = super(ExamSerializer, self).create(validated_data) return instance def update(self, instance, validated_data): if instance.delete: raise CustomError(u'考试[%s]已经被删除,禁止操作' % instance.name) instance = super(ExamSerializer, self).update(instance, validated_data) instance.change_examtime() instance.save() return instance class FormalExamLogSerializer(serializers.ModelSerializer): exam_name = serializers.CharField(source='exam.name', read_only=True) exam_subject_name = serializers.CharField(source='exam.subject.name', read_only=True) class Meta: model = ExamLog fields = "__all__"