serializers.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # coding=utf-8
  2. from rest_framework import serializers
  3. from .models import ExamPaper
  4. from utils.exceptions import CustomError
  5. class ExamPaperSerializer(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. class Meta:
  10. model = ExamPaper
  11. fields = "__all__"
  12. def validate(self, attrs):
  13. if 'subject' in attrs and attrs['subject'].delete:
  14. raise CustomError(u'科目[%s]已被删除!' % attrs['subject'].name)
  15. return attrs
  16. def create(self, validated_data):
  17. validated_data['create_user'] = self.context['request'].user
  18. instance = super(ExamPaperSerializer, self).create(validated_data)
  19. instance.update_count()
  20. if not instance.question_total_count:
  21. raise CustomError(u'请选择试题!')
  22. if instance.passline > instance.question_total_scores:
  23. raise CustomError(u'及格线不能大于试题总分!')
  24. instance.save()
  25. instance.generate_detail()
  26. return instance
  27. def update(self, instance, validated_data):
  28. old_count = []
  29. old_count.append(instance.single_simple_count)
  30. old_count.append(instance.single_mid_count)
  31. old_count.append(instance.single_hard_count)
  32. old_count.append(instance.multiple_simple_count)
  33. old_count.append(instance.multiple_mid_count)
  34. old_count.append(instance.multiple_hard_count)
  35. old_count.append(instance.fill_simple_count)
  36. old_count.append(instance.fill_mid_count)
  37. old_count.append(instance.fill_hard_count)
  38. old_count.append(instance.judgment_simple_count)
  39. old_count.append(instance.judgment_mid_count)
  40. old_count.append(instance.judgment_hard_count)
  41. old_count.append(instance.discuss_simple_count)
  42. old_count.append(instance.discuss_mid_count)
  43. old_count.append(instance.discuss_hard_count)
  44. if instance.delete:
  45. raise CustomError(u'试卷[%s]已经被删除,禁止操作' % instance.name)
  46. instance = super(ExamPaperSerializer, self).update(instance, validated_data)
  47. instance.update_count()
  48. if not instance.question_total_count:
  49. raise CustomError(u'请选择试题!')
  50. if instance.passline > instance.question_total_scores:
  51. raise CustomError(u'及格线不能大于试题总分!')
  52. instance.save()
  53. new_count = []
  54. new_count.append(instance.single_simple_count)
  55. new_count.append(instance.single_mid_count)
  56. new_count.append(instance.single_hard_count)
  57. new_count.append(instance.multiple_simple_count)
  58. new_count.append(instance.multiple_mid_count)
  59. new_count.append(instance.multiple_hard_count)
  60. new_count.append(instance.fill_simple_count)
  61. new_count.append(instance.fill_mid_count)
  62. new_count.append(instance.fill_hard_count)
  63. new_count.append(instance.judgment_simple_count)
  64. new_count.append(instance.judgment_mid_count)
  65. new_count.append(instance.judgment_hard_count)
  66. new_count.append(instance.discuss_simple_count)
  67. new_count.append(instance.discuss_mid_count)
  68. new_count.append(instance.discuss_hard_count)
  69. change_detail = False
  70. for i in range(0, len(old_count)):
  71. if old_count[i] != new_count[i]:
  72. change_detail = True
  73. break
  74. if change_detail:
  75. instance.clear_detail()
  76. instance.generate_detail()
  77. return instance
  78. class StaffExamPaperSerializer(serializers.ModelSerializer):
  79. subject_name = serializers.CharField(source='subject.name', read_only=True)
  80. status_text = serializers.SerializerMethodField()
  81. def get_status_text(self, obj):
  82. from apps.examination.exam.models import ExamLog
  83. exampaper = ExamLog.objects.filter(user=self.context['request'].user,exampaper=obj)
  84. if exampaper:
  85. return True
  86. return False
  87. class Meta:
  88. model = ExamPaper
  89. fields = ('id', 'name','subject_name','status_text','did_count','question_total_count', )