serializers.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # coding=utf-8
  2. from rest_framework import serializers
  3. from .models import Exam, ExamLog
  4. from utils.exceptions import CustomError
  5. class ExamSerializer(serializers.ModelSerializer):
  6. subject_name = serializers.CharField(source='subject.name', read_only=True)
  7. type_text = serializers.CharField(source='get_type_display', read_only=True)
  8. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  9. question_total_scores = serializers.IntegerField(source='exampaper.question_total_scores', read_only=True)
  10. passline = serializers.IntegerField(source='exampaper.passline', read_only=True)
  11. exampaper_name = serializers.CharField(source='exampaper.name', read_only=True)
  12. examinee_name = serializers.SerializerMethodField()
  13. class Meta:
  14. model = Exam
  15. fields = "__all__"
  16. def get_examinee_name(self, obj):
  17. examinees = ExamLog.objects.filter(exam=obj, delete=False).values('user__name')
  18. examinee_list = []
  19. for item in examinees:
  20. if item['user__name']:
  21. examinee_list.append(item['user__name'])
  22. if examinee_list:
  23. return ','.join(examinee_list)
  24. return ''
  25. def create(self, validated_data):
  26. validated_data['create_user'] = self.context['request'].user
  27. instance = super(ExamSerializer, self).create(validated_data)
  28. return instance
  29. def update(self, instance, validated_data):
  30. if instance.delete:
  31. raise CustomError(u'考试[%s]已经被删除,禁止操作' % instance.name)
  32. instance = super(ExamSerializer, self).update(instance, validated_data)
  33. instance.change_examtime()
  34. instance.save()
  35. return instance
  36. class FormalExamLogSerializer(serializers.ModelSerializer):
  37. exam_name = serializers.CharField(source='exam.name', read_only=True)
  38. exam_subject_name = serializers.CharField(source='exam.subject.name', read_only=True)
  39. user_name = serializers.CharField(source='user.name', read_only=True)
  40. user_department = serializers.CharField(source='user.department.name', read_only=True)
  41. question_total_scores = serializers.IntegerField(source='exampaper.question_total_scores', read_only=True)
  42. passline = serializers.IntegerField(source='exampaper.passline', read_only=True)
  43. single_count = serializers.IntegerField(source='exampaper.single_total_count', read_only=True)
  44. single_scores = serializers.IntegerField(source='exampaper.single_total_scores', read_only=True)
  45. multiple_count = serializers.IntegerField(source='exampaper.multiple_total_count', read_only=True)
  46. multiple_scores = serializers.IntegerField(source='exampaper.multiple_total_scores', read_only=True)
  47. fill_count = serializers.IntegerField(source='exampaper.fill_total_count', read_only=True)
  48. fill_scores = serializers.IntegerField(source='exampaper.fill_total_scores', read_only=True)
  49. judgment_count = serializers.IntegerField(source='exampaper.judgment_total_count', read_only=True)
  50. judgment_scores = serializers.IntegerField(source='exampaper.judgment_total_scores', read_only=True)
  51. class Meta:
  52. model = ExamLog
  53. fields = "__all__"