在Django Rest Framework中串行化ManyToMany(2.3.5)抛出ValueError [英] Serializing ManyToMany in Django Rest Framework (2.3.5) throws ValueError

查看:286
本文介绍了在Django Rest Framework中串行化ManyToMany(2.3.5)抛出ValueError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我认为是一个非常简单的序列化程序设置,但是当我尝试将数据传输到我的API时,我收到以下错误:


ValueError:实例应该是一个queryset或其他可迭代的
many = True


这是视图:

  class QuizAPI(generics.RetrieveUpdateDestroyAPIView):
model = Quiz
serializer_class = QuizSerializer
lookup_field ='activity_id'

和序列化程序:



$ _ code> class MediaResourceSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(many = False,read_only = True)

class Meta:
model = MediaResource
fields =('owner','name','type','url')

class AnswerSerializer(serializers.ModelSerializer):
class元:
model =答案
fields =('text' ,'is_correct','order')

class QuestionSerializer(serializers.ModelSerializer):
answers = AnswerSerializer(many = True,required = False)
resources = MediaResourceSerializer = true,required = False)

class Meta:
model = Question
fields =(
'question_id',
'type',
'order',
'question_text',
'explain',
'resources',
'grading_weight',
'answers'


class QuizSerializer(serializers.ModelSerializer):
questions = QuestionSerializer(many = True,required = False)
created_by = serializers.PrimaryKeyRelatedField(many = False,read_only = True)

class Meta:
model = Quiz
fields =(
'activity_id',
'name',
'is_hidden ,
'created_by',
'created_date',
'last_updated',
'可共享',
'问题'

如果我从QuizSerializer中注释出问题字段,它运行正常(当然没有问题数据)。



**编辑:
这是PUT呼叫有效负载:

  activity_id:4 
created_by:1
created_date:2013-07-29T20:39:47.981Z
is_hidden:false
last_updated:null
name:This只是一个测试
问题:[]
可共享:true


解决方案

问题在于,嵌套表示形式不支持读写,并将其序列化写入操作的平面结构是要走的路。


I have what I assumed to be a pretty simple serializer setup, but when I attempt to PUT data to my API, I get the following error:

ValueError: instance should be a queryset or other iterable with many=True

Here's the view:

class QuizAPI(generics.RetrieveUpdateDestroyAPIView):
    model = Quiz
    serializer_class = QuizSerializer
    lookup_field = 'activity_id'

and the serializers:

class MediaResourceSerializer(serializers.ModelSerializer):
    owner = serializers.PrimaryKeyRelatedField(many=False, read_only=True)

    class Meta:
        model = MediaResource
        fields = ('owner', 'name', 'type', 'url')

class AnswerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Answer
        fields = ('text','is_correct','order')

class QuestionSerializer(serializers.ModelSerializer):
    answers = AnswerSerializer(many=True, required=False)
    resources = MediaResourceSerializer(many=True, required=False)

    class Meta:
        model = Question
        fields = ( 
            'question_id', 
            'type', 
            'order', 
            'question_text', 
            'explanation', 
            'resources', 
            'grading_weight', 
            'answers' 
        )

class QuizSerializer(serializers.ModelSerializer):
    questions = QuestionSerializer(many=True, required=False)
    created_by = serializers.PrimaryKeyRelatedField(many=False, read_only=True)

    class Meta:
        model = Quiz
        fields = (
            'activity_id', 
            'name',  
            'is_hidden', 
            'created_by', 
            'created_date', 
            'last_updated', 
            'sharable', 
            'questions'
        )

If I comment out the 'questions' field from QuizSerializer it runs just fine (of course without question data).

** Edit: Here's the PUT call payload:

activity_id: 4
created_by: 1
created_date: "2013-07-29T20:39:47.981Z"
is_hidden: false
last_updated: null
name: "This is only a test"
questions: []
sharable: true

解决方案

The problem looks to be that nested representations do not support read–write, and serializing flat structures for write operations is the way to go.

这篇关于在Django Rest Framework中串行化ManyToMany(2.3.5)抛出ValueError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆