class Quiz(CommonTimerContentDataModel):
available_questions = models.PositiveIntegerField(
default=1,
verbose_name='Количество доступных для ответов вопросов'
)
show_answers = models.BooleanField(
default=True,
verbose_name='Показывать ответы'
)
class Meta:
verbose_name = 'Опрос'
verbose_name_plural = 'Опросы'
class Question(models.Model):
__QUESTION_TYPE_CHOICES = [
('INPUT', 'Ввод правильного ответа с клавиатуры'),
('CHOOSE_SEVERAL', 'Выбор нескольких правильных ответов'),
('CHOOSE_ONE', 'Выбор одного правильного ответа'),
('ESSAY', 'Сочинение')
]
quiz = models.ForeignKey(
Quiz,
on_delete=models.CASCADE,
null=False,
blank=False,
related_name='questions',
verbose_name='Опрос'
)
content = models.TextField(
verbose_name='Содержание вопроса',
null=False,
)
type = models.CharField(
max_length=255,
null=False,
choices=__QUESTION_TYPE_CHOICES,
verbose_name='Тип вопроса'
)
weight = models.PositiveIntegerField(
verbose_name='Значимость вопроса'
)
class AnswerSerializer(serializers.ModelSerializer):
class Meta:
model = QuestionAnswer
exclude = ('question', )
class QuestionSerializer(serializers.ModelSerializer):
answers = serializers.SerializerMethodField('get_answers')
@staticmethod
def get_answers(obj):
answers = QuestionAnswer.objects.filter(question=obj)
return AnswerSerializer(answers, many=True).data
class Meta:
model = Question
exclude = ('quiz', )
questions = serializers.SerializerMethodField('get_questions')
def get_questions(self, obj):
questions = Question.objects.filter(quiz=obj)
return QuestionSerializer(questions, many=True).data