2016-10-31 3 views
1

Я следующий запрос 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);

+0

данные вашего сервера json немного странные. Это не правильный формат json. 1. Имя поля json должно указывать с '' '' не '' '. 2. Объект внутри массива должен быть указан с' {} ',' ["GBP"] 'не правильный массив. Должен быть' [{" валюта ":" GBP "}]'. Сначала попробуйте исправить ваш json. – Enix

ответ

0

я в настоящее время не имеют компьютера, чтобы вырыть через источник, но вы можете проверить read_only параметры на вашем сериализатором. Afaik это работает только для отображения данных в ответах.

Вы можете легко проверить с помощью IPDB (IPython отладчика) Просто поставить:

import ipdb; ipdb.set_trace() 

Где вы хотите, чтобы начать отладку, начать вам сервер и запустить запрос.

+0

спасибо за ваш ответ - это запрос GET (так как он не меняет состояние на бэкэнд). Я обновлю свой ответ с помощью кода jquery запрос – AndrewO

+0

Sry изменил мой ответ, немного медленный на мобильном телефоне в настоящее время ... –

+0

как то, что @JohannesReichard сказал, проблема в флаге read_only. Если поле read_only, это означает, что вы не можете его изменить и так значение, которое вы предоставляете для этого поля, действительное или нет, просто отбрасывается. – Ramast

Смежные вопросы