serializers.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. class Meta:
  8. model = ExamPaper
  9. fields = "__all__"
  10. def validate(self, attrs):
  11. if 'subject' in attrs and attrs['subject'].delete:
  12. raise CustomError(u'科目[%s]已被删除!' % attrs['subject'].name)
  13. return attrs
  14. def create(self, validated_data):
  15. validated_data['create_user'] = self.context['request'].user
  16. instance = super(ExamPaperSerializer, self).create(validated_data)
  17. instance.update_count()
  18. instance.save()
  19. instance.generate_detail()
  20. return instance
  21. def update(self, instance, validated_data):
  22. old_count = []
  23. old_count.append(instance.single_simple_count)
  24. old_count.append(instance.single_mid_count)
  25. old_count.append(instance.single_hard_count)
  26. old_count.append(instance.multiple_simple_count)
  27. old_count.append(instance.multiple_mid_count)
  28. old_count.append(instance.multiple_hard_count)
  29. old_count.append(instance.fill_simple_count)
  30. old_count.append(instance.fill_mid_count)
  31. old_count.append(instance.fill_hard_count)
  32. old_count.append(instance.judgment_simple_count)
  33. old_count.append(instance.judgment_mid_count)
  34. old_count.append(instance.judgment_hard_count)
  35. if instance.delete:
  36. raise CustomError(u'试卷[%s]已经被删除,禁止操作' % instance.name)
  37. instance = super(ExamPaperSerializer, self).update(instance, validated_data)
  38. instance.update_count()
  39. instance.save()
  40. new_count = []
  41. new_count.append(instance.single_simple_count)
  42. new_count.append(instance.single_mid_count)
  43. new_count.append(instance.single_hard_count)
  44. new_count.append(instance.multiple_simple_count)
  45. new_count.append(instance.multiple_mid_count)
  46. new_count.append(instance.multiple_hard_count)
  47. new_count.append(instance.fill_simple_count)
  48. new_count.append(instance.fill_mid_count)
  49. new_count.append(instance.fill_hard_count)
  50. new_count.append(instance.judgment_simple_count)
  51. new_count.append(instance.judgment_mid_count)
  52. new_count.append(instance.judgment_hard_count)
  53. change_detail = False
  54. for i in range(0, len(old_count)):
  55. if old_count[i] != new_count[i]:
  56. change_detail = True
  57. break
  58. if change_detail:
  59. instance.clear_detail()
  60. instance.generate_detail()
  61. return instance