Advertisement
SVXX

Exam App - serializers.py

Jul 11th, 2015
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. from rest_framework import serializers
  2.  
  3. from quiz.models import Quiz, Sitting, Question
  4.  
  5.  
  6. class QuestionSerializer(serializers.HyperlinkedModelSerializer):
  7.     """
  8.    Serializer for Question model
  9.    """
  10.     figure = serializers.ImageField(use_url=True)
  11.     content = serializers.CharField()
  12.  
  13.     class Meta:
  14.         model = Question
  15.         fields = ('figure', 'content',)
  16.         read_only_fields = ('figure', 'content',)
  17.  
  18.  
  19. class QuizSerializer(serializers.HyperlinkedModelSerializer):
  20.     """
  21.    Serializer for Quiz model
  22.    """
  23.     title = serializers.CharField(max_length=60)
  24.     description = serializers.CharField(allow_blank=True)
  25.     success_text = serializers.CharField(allow_blank=True)
  26.     fail_text = serializers.CharField(allow_blank=True)
  27.     pass_mark = serializers.IntegerField()
  28.  
  29.     class Meta:
  30.         model = Quiz
  31.         fields = (
  32.             'title', 'description', 'success_text', 'fail_text',
  33.             'pass_mark',
  34.         )
  35.         read_only_fields = (
  36.             'title', 'description', 'success_text', 'fail_text',
  37.             'pass_mark',
  38.         )
  39.  
  40.  
  41. class SittingSerializer(serializers.ModelSerializer):
  42.     """
  43.    Serializer for Sitting model
  44.    """
  45.     user = serializers.HyperlinkedRelatedField(
  46.         view_name='account-detail', read_only=True
  47.     )
  48.     quiz = QuizSerializer()
  49.     question_list = serializers.SerializerMethodField()
  50.     incorrect_questions = serializers.SerializerMethodField()
  51.  
  52.     class Meta:
  53.         model = Sitting
  54.         fields = ('user', 'quiz', 'question_list', 'incorrect_questions',)
  55.         read_only_fields = ('user', 'quiz', 'question_list', 'incorrect_questions',)
  56.  
  57.     def _get_questions_from_ids(self, question_list):
  58.         """
  59.        This method accepts a list of question Ids as an argument and returns
  60.        a corresponding list of serialized Questions.
  61.        """
  62.         questions = Sitting.objects.filter(id__in=question_list)
  63.         return map(lambda question: QuestionSerializer(question), questions)
  64.  
  65.     def get_question_list(self, obj):
  66.         """
  67.        Returns the list of serialized question objects in question_list
  68.  
  69.        :param obj: Object being serialized, i.e., Sitting object
  70.        """
  71.         return self._get_questions_from_ids(obj.question_list.split(','))
  72.  
  73.     def get_incorrect_questions(self, obj):
  74.         """
  75.        Returns list of incorrect questions in serialized form
  76.  
  77.        :param obj: Object being serialized, i.e., Sitting object
  78.        """
  79.         return self._get_questions_from_ids(obj.incorrect_questions.split(','))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement