Я сталкиваюсь с странным поведением при написании вложенных структур с помощью django-rest, а затем пытается их протестировать с помощью тестового клиента django-rest. Вложенный дочерний объект должен быть необязательным.Сериализация необязательно вложенных структур: разница между QueryDict и нормальным dict?
Вот пример сериализатору:
from rest_framework import serializers
class OptionalChildSerializer(serializers.Serializer):
field_b = serializers.IntegerField()
field_c = serializers.IntegerField()
class Meta:
fields = ('field_b', 'field_c',)
class ParentSerializer(serializers.Serializer):
field_a = serializers.IntegerField()
child = OptionalChildSerializer(required=False, many=False)
class Meta:
fields = ('a', 'child',)
def perform_create(self, serializer):
# TODO: create nested object.
pass
(я опустил код в perform_create, так как это не имеет отношения к вопросу).
Теперь, проходя нормальный Dict в качестве аргумента данных работает просто отлично:
ser = ParentSerializer(data=dict(field_a=3))
ser.is_valid(raise_exception=True)
Но проходя QueryDict вместо этого будет терпеть неудачу:
from django.http import QueryDict
ser = ParentSerializer(data=QueryDict("field_a=3"))
ser.is_valid(raise_exception=True)
ValidationError: {'child': {'field_b': [u'This field is required.'], 'field_c': [u'This field is required.']}}
На фактического веб-сайта, то API получает нормальный dict и, следовательно, отлично работает. Однако во время тестирования использование чего-то вроде client.post('url', data=dict(field_a=3))
приведет к тому, что QueryDict будет передан в представление и, следовательно, не будет работать.
Так что мой вопрос: в чем разница между QueryDict и нормальным dict? Или я подхожу к этому неправильно?
В данных = QueryDict ("field_a = 3") следует указывать "field_a = 3"? Его не цитируется в data = dict (field_a = 3) –
Вставьте код тестового кода. Каков ваш запрос «content_type»? –
А, я не установил его, но я думаю, это делает его multipart/form. Я ожидал, что django-rest предоставит приложение/json автоматически. Это, конечно, откуда мой QueryDict. – Nuschk