serializers.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # coding=utf-8
  2. import json
  3. from rest_framework import serializers
  4. from utils.exceptions import CustomError
  5. from .models import *
  6. class ExamQuestionSerializer(serializers.ModelSerializer):
  7. subject = serializers.CharField(source='chapter.subject.id', read_only=True)
  8. subject_text = serializers.CharField(source='chapter.subject.name', read_only=True)
  9. chapter_text = serializers.CharField(source='chapter.name', read_only=True)
  10. create_user_text = serializers.CharField(source='create_user.username', read_only=True)
  11. type_text = serializers.CharField(source='get_type_display', read_only=True)
  12. difficulty_text = serializers.CharField(source='get_difficulty_display', read_only=True)
  13. judgment = serializers.SerializerMethodField()
  14. def get_judgment(self, obj):
  15. if obj.judgment:
  16. return "1"
  17. return "0"
  18. class Meta:
  19. model = ExamQuestion
  20. fields = '__all__'
  21. def create(self, validated_data):
  22. if 'judgment' in self.initial_data:
  23. validated_data['judgment'] = True if self.initial_data['judgment'] == '1' else False
  24. validated_data['create_user'] = self.context['request'].user
  25. instance = super(ExamQuestionSerializer, self).create(validated_data)
  26. rows = json.loads(self.initial_data['rows'])
  27. for row in rows:
  28. if not row['content']:
  29. raise CustomError('答案不能为空,请填写答案!')
  30. if instance.type == ExamQuestion.SINGLE or instance.type == ExamQuestion.MULTIPLE:
  31. ExamQuestionOption.objects.create(
  32. main=instance,
  33. content=row['content'],
  34. right=row['right'],
  35. )
  36. elif instance.type == ExamQuestion.FILL:
  37. ExamQuestionFill.objects.create(
  38. main=instance,
  39. content=row['content'],
  40. order=row['order'],
  41. )
  42. return instance
  43. def update(self, instance, validated_data):
  44. if 'judgment' in self.initial_data:
  45. validated_data['judgment'] = True if self.initial_data['judgment'] == '1' else False
  46. instance = super(ExamQuestionSerializer, self).update(instance, validated_data)
  47. rows = json.loads(self.initial_data['rows'])
  48. for row in rows:
  49. if not row['content']:
  50. raise CustomError('答案不能为空,请填写答案!')
  51. if instance.type == ExamQuestion.SINGLE or instance.type == ExamQuestion.MULTIPLE:
  52. ExamQuestionOption.objects.filter(main=instance).update(delete=True, right=False)
  53. if row['id']:
  54. # 更新
  55. ExamQuestionOption.objects.filter(main=instance, id=row['id']).update(delete=False,
  56. content=row['content'],
  57. right=row['right'])
  58. else:
  59. # 新增
  60. ExamQuestionOption.objects.create(
  61. main=instance,
  62. content=row['content'],
  63. right=row['right'],
  64. )
  65. elif instance.type == ExamQuestion.FILL:
  66. ExamQuestionFill.objects.filter(main=instance).update(delete=True)
  67. if row['id']:
  68. # 更新
  69. ExamQuestionFill.objects.filter(main=instance, id=row['id']).update(delete=False,
  70. content=row['content'],
  71. order=row['order'])
  72. else:
  73. # 新增
  74. ExamQuestionFill.objects.create(
  75. main=instance,
  76. content=row['content'],
  77. order=row['order'],
  78. )
  79. return instance