在Django Rest Framework中串行化ManyToMany(2.3.5)抛出ValueError [英] Serializing ManyToMany in Django Rest Framework (2.3.5) throws ValueError
问题描述
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屋!