1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- # coding=utf-8
- from rest_framework import serializers
- from .models import *
- class PractiseLogSerializer(serializers.ModelSerializer):
- begin_answer = serializers.SerializerMethodField()
- end_answer = serializers.SerializerMethodField()
- next_practise = serializers.SerializerMethodField()
- def get_next_practise(self, obj):
- # 继续练习的下一题id
- next_practise = ''
- if obj.end_answer:
- now_type = obj.end_answer.question.type
- questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
- if obj.chapter:
- questions = questions.filter(chapter=obj.chapter)
- else:
- questions = questions.filter(chapter__subject=obj.subject)
- try:
- # ValueError: 1 is not in list
- now_question_index = list(questions).index(obj.end_answer.question.id)
- except ValueError:
- now_question_index = 0
- if now_question_index < (len(questions) -1):
- # 该题型未练习完,继续返回该题型下的习题
- next_practise = questions[now_question_index + 1]
- else:
- # 该题型已练习完,返回下一个题型下的习题
- while now_type <= ExamQuestion.JUDGMENT:
- now_type += 1
- questions = ExamQuestion.objects.filter(type=now_type, delete=False)
- if obj.chapter:
- questions = questions.filter(chapter=obj.chapter)
- else:
- questions = questions.filter(chapter__subject=obj.subject)
- questions = questions.order_by('id').first()
- if questions:
- next_practise = questions.id
- break
- return next_practise
- def get_end_answer(self, obj):
- if obj.end_answer:
- now_type = obj.end_answer.question.type
- # todo 按id查
- questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
- if obj.chapter:
- questions = questions.filter(chapter=obj.chapter)
- else:
- questions = questions.filter(chapter__subject=obj.subject)
- try:
- # ValueError: 1 is not in list
- now_question_index = list(questions).index(obj.end_answer.question.id)
- except ValueError:
- now_question_index = 0
- name = '{0}/{1} {2}第{3}题'.format(obj.end_answer.question.chapter.name,
- obj.end_answer.question.chapter.subject.name,
- ExamQuestion.TYPE_CHOICES[obj.end_answer.question.type - 1][1],
- now_question_index + 1
- )
- return name
- return ''
- def get_begin_answer(self, obj):
- if obj.begin_answer:
- now_type = obj.begin_answer.question.type
- questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
- if obj.chapter:
- questions = questions.filter(chapter=obj.chapter)
- else:
- questions = questions.filter(chapter__subject=obj.subject)
- try:
- # ValueError: 1 is not in list
- now_question_index = list(questions).index(obj.begin_answer.question.id)
- except ValueError:
- now_question_index = 0
- name = '{0}/{1} {2}第{3}题'.format(obj.begin_answer.question.chapter.name,
- obj.begin_answer.question.chapter.subject.name,
- ExamQuestion.TYPE_CHOICES[obj.begin_answer.question.type - 1][1],
- now_question_index + 1
- )
- return name
- return ''
- class Meta:
- model = PractiseLog
- fields = '__all__'
|