我有以下的JSON GET請求去定義產品配置的服務器空validated_data: {'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框架 - is_valid()始終傳遞和返回
我試圖通過DRF驗證這一點,我有以下配置:
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([])
)值。
我在做什麼錯?
額外信息
的JS生成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」]'不是一個正確的數組,應該是'[{貨幣「:」英鎊「}]'。嘗試修復你的json第一個。 – Enix