示例#1
0
 def test_question_deserializer_valid_json(self):
     question_json = '{"id": 2, "question_text": "text", "question_catalogue": 1}'
     stream = BytesIO(question_json)
     data = JSONParser().parse(stream)
     serializer = QuestionSerializer(data=data)
     self.assertTrue(serializer.is_valid())
     question = serializer.object
     question.save()
     #
     question_from_db = Question.objects.get(pk=2)
     self.assertEqual(question.question_text, "text")
     self.assertEqual(question_from_db.question_text, "text")
     #
     self.assertTrue(type(question.question_catalogue) is QuestionCatalogue)
     self.assertEqual(question.question_catalogue.pk,
                      self.question_catalogue.pk)
     self.assertEqual(question.question_catalogue.catalogue_name,
                      self.question_catalogue.catalogue_name)
     #
     self.assertTrue(
         type(question_from_db.question_catalogue) is QuestionCatalogue)
     self.assertEqual(question_from_db.question_catalogue.pk,
                      self.question_catalogue.pk)
     self.assertEqual(question_from_db.question_catalogue.catalogue_name,
                      self.question_catalogue.catalogue_name)
示例#2
0
    def save_question_data(data):
        serializer = QuestionSerializer(data=data)

        if serializer.is_valid():
            try:
                question = serializer.save()
                # Save Question Choices
                for i in range(1, 5):
                    question_choice_get = "question_choice_" + str(i)
                    choice_img_url = "question_choice_" + str(i) + "_image_url"
                    if i == int(data.get("correct_choice")):
                        QuestionChoice.objects.create(
                            choice_text=data.get(question_choice_get),
                            choice_img_url=data.get(choice_img_url),
                            is_right_choice=True,
                            question=question
                        )
                    else:
                        QuestionChoice.objects.create(
                            choice_text=data.get(question_choice_get),
                            choice_img_url=data.get(choice_img_url),
                            question=question
                        )
                # Save Question Chapter Mapping
                QuestionChapterMapping.objects.create(question=question, chapter_id=data.get("chapter_id"))

                return Response(serializer.data, status=status.HTTP_201_CREATED)
            except Exception as err:
                print("Exception occurred in Question Post \n", err)
                return Response(status=status.HTTP_400_BAD_REQUEST)
        print("Exception in Question Post\n", serializer.errors)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
示例#3
0
 def test_expected_fields(self):
     """Tests expected serializer fields
     'title',
     'body'
     """
     question_data = factory.build(dict, FACTORY_CLASS=QuestionFactory)
     serializer = QuestionSerializer(data=question_data)
     is_valid = serializer.is_valid()
     print("Keys: ", serializer.validated_data.keys())
     print("Errors: ", serializer.errors)
     assert is_valid, "serializer validation test"
     assert serializer.validated_data.keys() == set(['title', 'body'])
示例#4
0
 def questions(self, request, pk=None):
     lesson = self.get_object()
     questions = Question.objects.filter(lesson=lesson.id)
     serialized = QuestionSerializer(questions, many=True)
     if not questions:
         return Response(status=status.HTTP_404_NOT_FOUND, data={'message': 'This lesson has not questions'})
     return Response(status=status.HTTP_200_OK, data=serialized.data)
示例#5
0
class AnswerSerializer(ModelSerializer):
    writer = UserOtherDetailsSerializer(read_only=True)
    question = QuestionSerializer()
    no_of_comments = SerializerMethodField()

    class Meta:
        model = Answer
        fields = [
            'id',
            'question',
            'writer',
            'date_written',
            'time_written',
            'body',
            'no_of_upvotes',
            'no_of_downvotes',
            'no_of_views',
            'no_of_comments',
        ]

    def get_no_of_comments(self, obj):
        try:
            return obj.getComments()
        except:
            return 0
示例#6
0
class AudioSerializer(serializers.ModelSerializer):

    tag = serializers.SlugRelatedField(many=True,
                                       slug_field='name',
                                       read_only=True)
    update_tag = serializers.ListField(
        child=serializers.CharField(max_length=100), write_only=True)
    result = ResultSerializer(required=False)
    question = QuestionSerializer(required=False, read_only=True)

    def create(self, validated_data):
        tag_name = validated_data.pop('update_tag')
        instance = super().create(validated_data)
        tags = []
        for name in tag_name:
            tag, created = Tag.objects.get_or_create(name=name)
            tags.append(tag)
        instance.tag.set(tags)

        return instance

    def update(self, instance, validated_data):
        tag_name = validated_data.pop('update_tag')
        instance = super().update(instance, validated_data)
        tags = []
        for name in tag_name:
            tag, created = Tag.objects.get_or_create(name=name)
            tags.append(tag)
        instance.tag.set(tags)
        return instance

    class Meta:
        model = Audio
        exclude = []
        read_only_fields = ['writer', 'result']
示例#7
0
文件: views.py 项目: proj5/tech2016
 def get(self, request, format=None):
     # Get a specific question
     if request.GET.get('questionID') is not None:
         questionID = int(request.GET.get('questionID'))
         question = Question.objects.get(pk=questionID)
         serializer = QuestionSerializer(question)
         return Response(serializer.data)
示例#8
0
 def send_question_update(self):
     current_round = self.get_current_round()
     async_to_sync(self.channel_layer.group_send)(self.room_group_name, {
         'type':
         'question_update',
         'data':
         QuestionSerializer().to_representation(current_round.question)
     })
示例#9
0
 def get(self, request, pk, format=None):
     qid = FavouriteQuestion.objects.values_list(
         'question_id', flat=True).filter(author_id=pk).all()
     questions = Question.objects.filter(id__in=qid).all()
     serializer = QuestionSerializer(questions,
                                     context={'request': request},
                                     many=True)
     return Response(serializer.data)
 async def send_question_update(self):
     current_round = await self.get_current_round()
     await self.channel_layer.group_send(
         self.game_group, {
             'type':
             'question_update',
             'data':
             QuestionSerializer().to_representation(current_round.question)
         })
示例#11
0
 def test_question_serializer(self):
     question_json = '{"id": 1, "question_text": "text", "question_catalogue": 1}'
     question = Question.objects.get(pk=1)
     serializer = QuestionSerializer(question)
     data = serializer.data
     self.assertEqual(data['id'], 1)
     self.assertEqual(data['question_text'], "text")
     self.assertEqual(data['question_catalogue'],
                      self.question_catalogue.id)
     self.assertEqual(JSONRenderer().render(data), question_json)
示例#12
0
def get_question(request, pk):

    try:
        question = Question.objects.get(pk=pk)
    except Question.DoesNotExist:
        return Response({'Detail': 'Question not found'}, status=404)

    if request.method == 'GET':
        serializer = QuestionSerializer(question)
        return JsonResponse(serializer.data)
示例#13
0
 def get(self, request, format=None):
     search = request.GET.get('search', '')
     if search == '':
         question = Question.objects.all()
     else:
         question = Question.objects.filter(
             Q(question__icontains=search)
             | Q(author__username__icontains=search)).all()
     serializer = QuestionSerializer(question,
                                     context={'request': request},
                                     many=True)
     return Response(serializer.data)
示例#14
0
文件: views.py 项目: gzaii1/Q-A
	def getAllQuestion(self, request):
		questions = QuestionSerializer(Question.objects.all().order_by('create_time'), many=True ).data
		for one in questions:
			# 返回类型为OrdededDict, 键值对形式存储数据,
			optionSet = OptionViewSet()
			option_list = optionSet.getOptionById(one['question_id'])
			one['option_list'] = option_list
			one['right_answer'] = ["%s"%item['question_index'] for item in filter(lambda n:n['correctness']==True, option_list)]
		res = {
			'success':True,
			'data':questions
		}
		return Response(res)
示例#15
0
    def create(self, request, *args, **kwargs):
        try:
            items_data = request.data['items']
        except KeyError:
            return response.Response({"questions": "not exists"},
                                     status=status.HTTP_400_BAD_REQUEST)

        serializer = self.get_serializer(data=request.data)
        if not serializer.is_valid():
            return response.Response({"test serializer": "error"},
                                     status=status.HTTP_400_BAD_REQUEST)

        with transaction.atomic():
            serializer.save()
            for item in items_data:
                s = QuestionSerializer(data=item)
                if not s.is_valid():
                    return response.Response({"question serializer": "error"},
                                             status.HTTP_400_BAD_REQUEST)
                s.save()
        return response.Response(serializer.data,
                                 status=status.HTTP_201_CREATED)
示例#16
0
def question_list(request):
    if request.method == 'GET':
        questions = Question.objects.all()
        questions_serializer = QuestionSerializer(questions, many=True)
        return JSONResponse(questions_serializer.data)
    elif request.method == 'POST':
        question_data = JSONParser().parse(request)
        if ('text' not in question_data):
            return JSONError(message="'text' is not found in request data",
                         code=400, status=status.HTTP_400_BAD_REQUEST)
        if ('answers' not in question_data):
            return JSONError(message="'answers' is not found in request data",
                         code=400, status=status.HTTP_400_BAD_REQUEST)
        question_serializer = QuestionSerializerPost(data=question_data)
        if question_serializer.is_valid():
            question_serializer.save()
            return JSONResponse(question_serializer.data,
                                status=status.HTTP_201_CREATED)
        return JSONResponse(question_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
示例#17
0
def question_answer_detail(request, pk):
    try:
        question = Question.objects.get(pk=pk)
    except Question.DoesNotExist:
        return HttpResponse(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        question_serializer = QuestionSerializer(question)
        return JSONResponse(question_serializer.data)
    elif request.method == 'PUT':
        question_data = JSONParser().parse(request)
        question_serializer = QuestionSerializer(question, data=question_data)
        if question_serializer.is_valid():
            question_serializer.save()
            return JSONResponse(question_serializer.data)
        return JSONResponse(question_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
    elif request.method == 'DELETE':
        question.delete()
        return HttpResponse(status=status.HTTP_204_NO_CONTENT)
示例#18
0
    def get(self, request, *args, **kwargs):
        user_id = request.user.id
        chapter_id = request.query_params.get('chapter_id')
        question_ids = QuestionChapterMapping.objects.filter(chapter_id=chapter_id).values_list(
            'question_id', flat=True)

        questions = Question.objects.filter(id__in=question_ids).order_by('id')
        serializer = QuestionSerializer(questions, many=True)

        for question_data in serializer.data:
            try:
                user_question_attempt = UserQuestionProgress.objects.get(user_id=user_id,
                                                                         question_id=question_data['id'])
                question_data['user_question_choice_id'] = user_question_attempt.question_choice_id
                question_data['user_attempt_is_correct'] = user_question_attempt.is_correctly_solved

            except UserQuestionProgress.DoesNotExist:
                question_data['user_question_choice_id'] = None
                question_data['user_attempt_is_correct'] = None

        return Response(serializer.data)
示例#19
0
文件: views.py 项目: proj5/tech2016
 def get(self, request, username, format=None):
     # Get user's asked questions
     if request.GET.get('type') == 'question':
         startID = int(request.GET.get('startID'))
         count = int(request.GET.get('count'))
         user = A2AUser.objects.get(user__username=username)
         posts = user.post_created.all().filter(type='question')
         questions = [post.question for post in posts]
         sorted(questions, key=self.getKey)
         result = []
         for index in range(len(questions) - 1, -1, -1):
             question = questions[index]
             if count <= 0:
                 break
             if (question.id < startID) or (startID == 0):
                 result.append(question)
                 count -= 1
         serializer = QuestionSerializer(result, many=True)
         return Response(serializer.data)
     elif request.GET.get('type') == 'answer':
         user = A2AUser.objects.get(user__username=username)
         startID = int(request.GET.get('startID'))
         count = int(request.GET.get('count'))
         user = A2AUser.objects.get(user__username=username)
         if startID != 0:
             posts = user.post_created.all().filter(
                 id__lt=startID, type='answer').order_by('-id')
         else:
             posts = user.post_created.all().filter(
                 type='answer').order_by('-id')
         result = []
         for post in posts:
             if count <= 0:
                 break
             result.append(post)
             count -= 1
         serializer = AnswerWithQuestionSerializer(result, many=True)
         return Response(serializer.data)
示例#20
0
    def get(self, request):
        search_term = request.GET.get('search_term')
        sort_type = int(request.GET.get('sort_type'))
        page = int(request.GET['page'])

        splited_term = search_term.split()

        if sort_type == 1:
            q = Question.objects.filter(
                Q(title__icontains=search_term)
                | Q(question_details__icontains=search_term)).distinct(
                ).order_by('-no_of_answers')
            pagination_class = Paginator(q, 5)
            q = pagination_class.page(page)
            serializer = QuestionSerializer(q, many=True)
            return Response(serializer.data)

        if sort_type == 2:
            p = UserOtherDetails.objects.filter(
                Q(user__username__icontains=search_term)
                | Q(user__first_name__icontains=search_term)
                | Q(user__last_name__icontains=search_term)).distinct()
            pagination_class = Paginator(p, 2)
            p = pagination_class.page(page)
            serializer = UserOtherDetailsSerializer(p, many=True)
            return Response(serializer.data)

        if sort_type == 3:
            t = Topic.objects.filter(
                Q(title__icontains=search_term)
                | Q(desc__icontains=search_term)).distinct()
            pagination_class = Paginator(t, 3)
            t = pagination_class.page(page)
            serializer = TopicSerializer(t, many=True)
            return Response(serializer.data)
        return Response(None)
示例#21
0
def question_answer_list(request):
    if request.method == 'GET':
        questions = Question.objects.all()
        questions_serializer = QuestionSerializer(questions, many=True)
        answers = Answer.objects.all()
        answers_serializer = AnswerSerializer(answers, many=True)
        json_response = {
            'questions': questions_serializer.data,
            'answers': answers_serializer.data,
        }
        return JSONResponse(json_response)
    elif request.method == 'POST':
        question_data = JSONParser().parse(request)
        question_serializer = QuestionSerializer(data=question_data)
        if question_serializer.is_valid():
            question_serializer.save()
            return JSONResponse(question_serializer.data,
                                status=status.HTTP_201_CREATED)
        return JSONResponse(question_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
示例#22
0
class AnswerSerializer(ModelSerializer):
    writer = UserOtherDetailsSerializer(read_only=True)
    question = QuestionSerializer()
    no_of_comments = SerializerMethodField()
    upvoted = SerializerMethodField()
    downvoted = SerializerMethodField()
    archived = SerializerMethodField()
    thanked = SerializerMethodField()
    edit_suggested = SerializerMethodField()

    class Meta:
        model = Answer
        fields = [
            'id',
            'question',
            'writer',
            'date_written',
            'time_written',
            'body',
            'no_of_upvotes',
            'no_of_downvotes',
            'no_of_views',
            'no_of_comments',
            'upvoted',
            'downvoted',
            'archived',
            'thanked',
            'edit_suggested',
            'anonymous',
        ]

    def get_no_of_comments(self, obj):
        try:
            return obj.getComments()
        except:
            return 0

    def get_upvoted(self, obj):
        try:
            return obj.isUpvoted(self.context.get('request').user)
        except:
            return False

    def get_downvoted(self, obj):
        try:
            return obj.isDownvoted(self.context.get('request').user)
        except:
            return False

    def get_archived(self, obj):
        try:
            return obj.isArchived(self.context.get('request').user)
        except:
            return False

    def get_thanked(self, obj):
        try:
            return obj.hasThanked(self.context.get('request').user)
        except:
            return False

    def get_edit_suggested(self, obj):
        try:
            return obj.hasSuggested(self.context.get('request').user)
        except:
            return False
示例#23
0
 def get(self, request, pk, format=None):
     questions = Question.objects.filter(author_id=pk).all()
     serializer =\
         QuestionSerializer(questions, context={'request': request},
                            many=True)
     return Response(serializer.data)
示例#24
0
class ResultSerializer(serializers.ModelSerializer):
    quiz = QuestionSerializer()

    class Meta:
        model = Result
        fields = ('quiz', 'user', 'score', 'incorrect_answers')
示例#25
0
 def create(self, request, *args, **kwargs):
     serializer = QuestionSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     serializer.save()
     return response.Response(serializer.data,
                              status=status.HTTP_201_CREATED)
示例#26
0
 def get_question_info(self, obj):
     queryset = obj.question.all()
     serializer = QuestionSerializer(queryset, many=True).data
     return serializer
示例#27
0
 def test_question_catalogue_invalid_scope(self):
     catalogue_json = '{"id": 2, "catalogue_scope": "wrong", "catalogue_name": "cat"}'
     stream = BytesIO(catalogue_json)
     data = JSONParser().parse(stream)
     question_catalogue_serializer = QuestionSerializer(data=data)
     self.assertFalse(question_catalogue_serializer.is_valid())
示例#28
0
def question_detail(request, pk):
    try:
        question_id = int(pk)
        question = get_object_or_None(Question, id=question_id)
    except ValueError:
        return JSONError(message="Question ID value is not an Integer",
                         code=400, status=status.HTTP_400_BAD_REQUEST)
    if question is None:
        return JSONError(message="Question is not found",
                         code=404, status=status.HTTP_404_NOT_FOUND)
    print(question.text)
    if request.method == 'GET':
        question_serializer = QuestionSerializer(question)
        return JSONResponse(question_serializer.data)
    elif request.method == 'PUT':
        ans_add = []
        ans_rmv = []
        try:
            answer_data = JSONParser().parse(request)
            if (("ans-add" not in answer_data) and
                    ("ans-remove" not in answer_data)):
                raise ValueError('Required key is not found in request data')
            if ("ans-add" in answer_data):
                if ((not isinstance(answer_data["ans-add"], (str, unicode))) or
                        (not (all(isinstance(int(x), int) for x in
                                 answer_data["ans-add"].split(","))))):
                    raise ValueError('Value is wrong in the "ans-add" data')
                else:
                    ans_add = answer_data["ans-add"].split(",")
            if ("ans-remove" in answer_data):
                if ((not isinstance(answer_data["ans-remove"],
                                    (str, unicode))) or
                        (not all(isinstance(int(x), int) for x in
                                 answer_data["ans-remove"].split(",")))):
                    raise ValueError('Value is wrong in the "ans-remove" data')
                else:
                    ans_rmv = answer_data["ans-remove"].split(",")


            for ans_r in ans_rmv:
                answer_remove = get_object_or_None(Answer, pk=ans_r)
                if answer_remove is None:
                    raise ValueError("{0} is not valid in 'ans-remove'".format(ans_r))
            for ans_a in ans_add:
                answer_add = get_object_or_None(Answer, pk=ans_a)
                if answer_add is None:
                    raise ValueError("{0} is not valid in 'ans-add'".format(user_a))

            for ans_r in ans_rmv:
                answer_remove = Answer.objects.get(pk=ans_r)
                question.answers.remove(answer_remove)
            for ans_a in ans_add:
                answer_add = Answer.objects.get(pk=ans_a)
                question.answers.add(answer_add)
            question.save()

            question_serializer = QuestionSerializer(question, many=False)
            return JSONResponse(question_serializer.data)
        except ValueError, ve:
            print(ve)
            return JSONError(message=str(ve),
                             code=400, status=status.HTTP_400_BAD_REQUEST)
        except Exception, e:
            print(e)
            return JSONError(message="Object is not updated",
                             code=403, status=status.HTTP_403_FORBIDDEN)
示例#29
0
from questions.models import Question





question = Question(title='moon shot test is hard?')
question.save()

question = Question(title='Do you afraid from snakes?')
question.save()


#update data
from questions.serializers import QuestionSerializer
serializer = QuestionSerializer(question)
serializer.data
# {'pk': 3, 'description': u'', 'title': u'Do you afraid from snakes?'}





#get json from data

from rest_framework.renderers import JSONRenderer
content = JSONRenderer().render(serializer.data)
content
# '{"pk":3,"title":"Do you afraid from snakes?","description":""}'

示例#30
0
 def test_question_deserializer_invalid_json(self):
     question_json = '{"question_catalogue": 1}'
     stream = BytesIO(question_json)
     data = JSONParser().parse(stream)
     serializer = QuestionSerializer(data=data)
     self.assertFalse(serializer.is_valid())
示例#31
0
 def get(self, request, pk, format=None):
     question = self.get_object(pk)
     serializer = QuestionSerializer(question, context={'request': request})
     return Response(serializer.data)