Django Rest Framework API中的嵌套序列化器
我在Django中使用Rest Framework。利用可浏览的API功能,我可以根据给定API的序列化器自动生成表单(用于http的POST、PUT等请求)。
现在我遇到的问题是,我正在创建一个API,它使用嵌套序列化器来接收一个已知格式的字典列表。在主序列化器中声明嵌套序列化器的代码如下:
customer_hosts = CustomerNetworkHostSerializer(many=True, required=True)
我的API是从rest_framework的CreateAPIView继承而来的。我还将serializer_class设置为我的主序列化器。
如果我手动通过http POST发送所需的json对象,API可以正常工作,但我无法通过浏览器使用自动生成的表单发送嵌套序列化器的值。嵌套序列化器的变量根本没有显示出来。
所以我想知道有没有办法让可浏览的API与嵌套的动态序列化器一起工作,如果可能的话?
1 个回答
1
我找不到确切的RFC参考,但这里的限制是HTTP。HTTP表单本身无法直接处理嵌套的数据结构(无论是application/x-www-form-urlencoded还是multipart/form-data都依赖于简单的键值对格式)。
一种解决方法是创建一个页面,使用可浏览的API渲染器来显示表单中可以处理的部分,然后自己实现一些逻辑来:
- 渲染嵌套的序列化器
- 将表单和内容格式化成其他语言,以便提交到你的终点(例如,将HTML表单和内容转换为JSON:使用jQuery将表单数据转换为JavaScript对象)