serializers.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # coding=utf-8
  2. from rest_framework import serializers
  3. from .models import *
  4. class PractiseLogSerializer(serializers.ModelSerializer):
  5. begin_answer = serializers.SerializerMethodField()
  6. end_answer = serializers.SerializerMethodField()
  7. next_practise = serializers.SerializerMethodField()
  8. def get_next_practise(self, obj):
  9. # 继续练习的下一题id
  10. next_practise = ''
  11. if obj.end_answer:
  12. now_type = obj.end_answer.question.type
  13. questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
  14. now_question_index = list(questions).index(obj.end_answer.question.id)
  15. if now_question_index < (len(questions) -1):
  16. # 该题型未练习完,继续返回该题型下的习题
  17. next_practise = questions[now_question_index + 1]
  18. else:
  19. # 该题型已练习完,返回下一个题型下的习题
  20. while now_type <= ExamQuestion.JUDGMENT:
  21. now_type += 1
  22. questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').first()
  23. if questions:
  24. next_practise = questions.id
  25. break
  26. return next_practise
  27. def get_end_answer(self, obj):
  28. if obj.end_answer:
  29. now_type = obj.end_answer.question.type
  30. # todo
  31. questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
  32. now_question_index = list(questions).index(obj.end_answer.question.id)
  33. name = '{0}/{1} {2}第{3}题'.format(obj.end_answer.question.chapter.name,
  34. obj.end_answer.question.chapter.subject.name,
  35. ExamQuestion.TYPE_CHOICES[obj.end_answer.question.type - 1][1],
  36. now_question_index + 1
  37. )
  38. return name
  39. return ''
  40. def get_begin_answer(self, obj):
  41. if obj.begin_answer:
  42. now_type = obj.begin_answer.question.type
  43. questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
  44. now_question_index = list(questions).index(obj.begin_answer.question.id)
  45. name = '{0}/{1} {2}第{3}题'.format(obj.begin_answer.question.chapter.name,
  46. obj.begin_answer.question.chapter.subject.name,
  47. ExamQuestion.TYPE_CHOICES[obj.begin_answer.question.type - 1][1],
  48. now_question_index + 1
  49. )
  50. return name
  51. return ''
  52. class Meta:
  53. model = PractiseLog
  54. fields = '__all__'