我正在努力找出如何在DRF中编写自定义序列化程序来解析传递给端点的复杂JSON数据结构。JSON如下所示:
{
"name": "new",
"site": "US",
"data": {
"settings": [],
"meta": {
"meta1":{}
}
}
}
这是我的后端代码:
^{pr2}$但是data
总是返回None
。仔细观察request
对象,传入的JSON如下所示:
# POST attribute of request object
'name' = 'new'
'site' = 'US'
'data[settings][0] = ''
'data[meta][meta1][] = ''
基本上,与data
键相关联的嵌套JSON对象没有正确序列化为Pythondict
和{
有没有人对自定义序列化程序有什么建议,可以将data
JSON正确地转换为适当的Python对象?我从这个开始,但是它抛出了一个异常(When a serializer is passed a 'data' keyword argument you must call '.is_valid()' before attempting to access the serialized '.data' representation.
You should either call '.is_valid()' first, or access '.initial_data' instead.
)。以下是我创建的自定义序列化程序的代码:
# serializers.py
class SaveDataSerializer(serializers.Serializer):
name = serializers.CharField()
site = serializers.CharField()
data = serializers.DictField()
def create(self, validated_data):
return dict(**validated_data)
谢谢。在
我通过将JS对象传递给
$.ajax
时将其转换为JSON来解决我的问题,然后DRF能够正确地解析成Python对象。下面是我使用的jQuery的一个片段:请注意,如果不指定任何内容,jQuery将默认为
x-www-urlencoded
作为Content-Type
。由于我使用JSON.stringify()
方法显式地将ajaxData
对象转换为JSON字符串,因此Content-Type
也需要显式设置。在我从这个得到了答案:Convert Object to JSON string
当然,这并不能真正回答我最初的问题,但这是另一个更简单的解决方案,它可以像我想要的那样工作。通过这样做,我不必创建任何自定义序列化程序,但我必须修改我的API视图,如下所示:
^{pr2}$完成此操作后,将返回预期的对象类型
相关问题 更多 >
编程相关推荐