Я следующий запрос GET JSON, идущий к серверу, который определяет конфигурацию продукта: {'currency': ['"GBP"'], 'productConfig': ['[{"component":"c6ce9951","finish":"b16561c9"},{"component":"048f8bed","finish":"b4715cda"},{"component":"96801e41","finish":"8f90f764"},{"option":"6a202c62","enabled":false},{"option":"9aa498e0","enabled":true}]']}
Django REST Framework - is_valid() всегда проходит и пустой validated_data возвращается
Я пытаюсь проверить это через ФПИ, и у меня есть следующая конфигурация:
views.py
class pricingDetail(generics.ListAPIView):
authentication_classes = (SessionAuthentication,)
permission_classes = (IsAuthenticated,)
parser_classes = (JSONParser,)
def get(self, request, *args, **kwargs):
pricingRequest = pricingRequestSerializer(data=request.query_params)
if pricingRequest.is_valid():
return Response('ok')
serializers.py
class pricingComponentSerializer(serializers.ModelSerializer):
class Meta:
model = Component
fields = ('sku',)
class pricingFinishSerializer(serializers.ModelSerializer):
class Meta:
model = Finish
fields = ('sku',)
class pricingOptionSerializer(serializers.ModelSerializer):
class Meta:
model = ProductOption
fields = ('sku',)
class pricingConfigSerializer(serializers.ModelSerializer):
finish = pricingFinishSerializer(read_only=True, many=True)
component = pricingComponentSerializer(read_only=True, many=True)
option = pricingOptionSerializer(read_only=True, many=True)
enabled = serializers.BooleanField(read_only=True)
class pricingCurrencySerializer(serializers.ModelSerializer):
class Meta:
model = Currency
fields = ('currencyCode',)
class pricingRequestSerializer(serializers.Serializer):
config = pricingConfigSerializer(read_only=True)
currency = pricingCurrencySerializer(read_only=True)
Как вы можете видеть, что я пытаюсь проверить несколько моделей в рамках одного запроса за счет использования встроенных сериализаторов.
Моя проблема код выше, позволяют все, чтобы пройти через is_valid()
(даже когда я делаю неверный запрос, и он также возвращает пустой validated_data
(OrderedDict([])
) значение.
Что я делаю неправильно?
дополнительная информация
, ИС формирования запроса GET выглядит следующим образом: this.pricingRequest = $.get(this.props.pricingEndpoint, { productConfig: JSON.stringify(this.state.productConfig), currency: JSON.stringify(this.state.selectedCurrency) }, function (returnedData, status) { console.log(returnedData);
данные вашего сервера json немного странные. Это не правильный формат json. 1. Имя поля json должно указывать с '' '' не '' '. 2. Объект внутри массива должен быть указан с' {} ',' ["GBP"] 'не правильный массив. Должен быть' [{" валюта ":" GBP "}]'. Сначала попробуйте исправить ваш json. – Enix