【发布时间】:2016-10-31 22:18:43
【问题描述】:
我有以下 JSON GET 请求发送到定义产品配置的服务器:
{'currency': ['"GBP"'], 'productConfig': ['[{"component":"c6ce9951","finish":"b16561c9"},{"component":"048f8bed","finish":"b4715cda"},{"component":"96801e41","finish":"8f90f764"},{"option":"6a202c62","enabled":false},{"option":"9aa498e0","enabled":true}]']}
我正在尝试通过 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([])) 值。
我做错了什么?
额外信息
生成GET请求的JS如下:
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"]不是一个正确的数组。应该是[{"currency": "GBP"}]。尝试先修复你的 json。
标签: django django-rest-framework