python - tutorial - partial update django rest framework
Serializar ManyToMany en Django Rest Framework(2.3.5) arroja ValueError (1)
Tengo lo que asumí que es una configuración de serializador bastante simple, pero cuando intento PONER datos en mi API, aparece el siguiente error:
ValueError: instancia debe ser un conjunto de consulta u otro iterable con many = True
Aquí está la vista:
class QuizAPI(generics.RetrieveUpdateDestroyAPIView):
model = Quiz
serializer_class = QuizSerializer
lookup_field = ''activity_id''
y los serializadores:
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''
)
Si hago un comentario sobre el campo ''questions'' de QuizSerializer, se ejecuta correctamente (por supuesto, sin datos de preguntas).
** Editar: Aquí está la carga útil de la llamada 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
El problema parece ser que las representaciones anidadas no admiten lectura-escritura , y la serialización de estructuras planas para operaciones de escritura es el camino a seguir.