在Django Rest Framework(2.3.5)中序列化ManyToMany会抛出ValueError

Mor*_*toc 10 python django rest serialization django-rest-framework

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

ValueError:instance应该是一个queryset或其他可迭代的,其中many = True

这是观点:

class QuizAPI(generics.RetrieveUpdateDestroyAPIView):
    model = Quiz
    serializer_class = QuizSerializer
    lookup_field = 'activity_id'
Run Code Online (Sandbox Code Playgroud)

和序列化器:

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'
        )
Run Code Online (Sandbox Code Playgroud)

如果我从QuizSerializer中注释掉"问题"字段,它运行得很好(当然没有问题数据).

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

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
Run Code Online (Sandbox Code Playgroud)

pau*_*kow 1

问题似乎是嵌套表示不支持 read\xe2\x80\x93write,并且序列化平面结构以进行写入操作是可行的方法。

\n