使用DRF时出现Django内置签名错误

问题描述 投票:0回答:1

我无法找出错误。 API 有时返回数据,有时不返回。

class CreateQuiz(generics.ListCreateAPIView):    
    serializer_class = QuizSerializer
    
    
    def get_queryset(self):    
        classId = self.kwargs.get('classId',None)
        subject = self.kwargs.get('subject',None)
        category = Category.objects.filter(class_id=classId,category=subject).values_list('id',flat=True)[0]        
        # chapter = self.kwargs.get('chapter',None)
        
        subcategory=self.kwargs.get('chapter',None)
        subcat = SubCategory.objects.filter(id=subcategory).values_list('sub_category',flat=True)[0]
        total_marks = 30
        questionIDs = Question.objects.raw('''somesql''',params=[category,subcategory,total_marks,category,subcategory,total_marks])
        #
        
        # and qq.sub_category_id IN %s
        questions= MCQuestion.objects.filter(question_ptr_id__in=questionIDs).prefetch_related('answer_set__question')
        essayquestions= Essay_Question.objects.filter(question_ptr_id__in=questionIDs)
        
        user = User.objects.get(id=1)
        
        if MCQuestion.objects.filter(question_ptr_id__in=questionIDs).prefetch_related('answer_set__question').exists():
                    print("create quiz")
                    
                    quiz = Quiz()                        
                    
                    quiz.durationtest="10:00"
                    quiz.random_order=True
                    quiz.save()
                    
                    
                    quizid = Quiz.objects.filter(id=quiz.id).values_list('id',flat=True)[0]      
                    quiz = Quiz.objects.get(id=quiz.id)
                    quiz.title = "Practice Exam : "+ quiz.category.class_id.classVal +" "+quiz.category.category +" ("+subcat+") "
                    quiz.save()
                     
                    with connection.cursor() as cursor:
                                cursor.execute("INSERT INTO quiz_subcategory_quiz(subcategory_id,quiz_id) VALUES (%s,%s)",(subcategory,quiz.id,))
                    for obj in questionIDs:                           
                         
                        
                        if Question.objects.filter(id=obj.id,quiz__id=quiz.id).exists():
                            print("Do nothing")
                        else:
                            question = Question(id=obj.id)                        
                            question.quiz.add(quiz.id)
                            question.save()
                        
                       
                    obj, created = UserQuiz.objects.update_or_create(
                            user_id = user.id,quiz_id=quiz.id            
                        )
                                        
                    return Quiz.objects.filter(id=quizid)
        else:
            response = JsonResponse({"error": "there was an error"})
            response.status_code = 403 # To announce that the user isn't allowed to publish
            return response    
                       
        return Quiz.objects.filter(id=quizid)  
          

我的序列化器类

class QuizSerializer(serializers.ModelSerializer):  
    
    class Meta:
        model = Quiz
        fields=(
            'id',
            'title',
            'description',
            'url',
            'category',
            'random_order',
            'pass_mark',
            'draft',
            'durationtest',               
            
        )

我收到以下错误,并且它是随机发生的。有什么建议请留言。

QuizSerializer.title
的字段源映射到内置函数类型并且无效。在
bytes
实例上定义一个属性或方法,用于包装对内置函数的调用。

django django-rest-framework django-views django-serializer
1个回答
0
投票

我也遇到了类似的错误消息。知道这篇文章已有 2 年历史,也许我的解决方案将来会对某人有所帮助。

我的错误消息是:

Article.title

 的字段源映射到内置函数类型,并且是
无效的。在包装的 
str
 实例上定义属性或方法
对内置函数的调用。

问题是我没有将

Article

 模型的实例传递给序列化器,而是传递了一个字符串!所以我假设发生此错误时 OP 正在传递 
bytes
 类型。

© www.soinside.com 2019 - 2024. All rights reserved.