from rest_framework import serializers from apps.quiz.models import Question, Quiz, QuizParticipant from apps.course.models import Lesson class QuizListSerializer(serializers.ModelSerializer): permission = serializers.SerializerMethodField() class Meta: model = Quiz fields = ['id', 'title', 'description', 'permission', 'each_question_timing',] def get_permission(self, obj): # Check if the user has participated in this quiz user = self.context['request'].user participated = QuizParticipant.objects.filter(user=user, quiz=obj).exists() return not participated class QuestionSerializer(serializers.ModelSerializer): options = serializers.SerializerMethodField() def get_options(self, obj) -> list: return [ { 'id': i, 'title': getattr(obj, f"option{i}") } for i in range(1, 5) ] class Meta: model = Question fields = ['id', 'question', 'options', 'correct_answer'] class QuizSerializer(serializers.ModelSerializer): lesson = serializers.PrimaryKeyRelatedField(read_only=True) questions = QuestionSerializer(many=True) permission = serializers.SerializerMethodField() class Meta: model = Quiz fields = ['id', 'permission', 'lesson', 'title', 'description', 'each_question_timing', 'questions'] def get_permission(self, obj): # Check if the user has participated in this quiz user = self.context['request'].user participated = QuizParticipant.objects.filter(user=user, quiz=obj).exists() return not participated