django - 根据 request.data 类型创建视图的不同序列化程序?
问题描述
我正在尝试设置一个创建视图,该视图允许根据有效负载分别是字典还是列表来创建单个对象或嵌套对象。
# views.py
class CreateAPIView(generics.CreateAPIView):
queryset = Item.objects.all()
def get_serializer_class(self):
print("get_serializer_class runs")
if type(self.request.data.__class__.__name__) == "dict":
return SingleItemSerializer
else:
return NestedItemSerializer
# dictionary
single_payload = {"name": "A"}
# list
multiple_payload = [
{"name": "B", children: [
{"name": "C", children: []}
]},
{"name": "D", children: []},
{"name": "E", children: []},
]
# Works fine. "get_serializer_class runs" is printed. Returns HTTP_201
response = APIClient().post(CreateAPIView_URL, single_payload)
# Doesn't work. "get_serializer_class runs" is not even printed. Returns HTTP_401
response = APIClient().post(CreateAPIView_URL, multiple_payload)
我已经尝试转换multiple_payload
为 JSON,包括format="json"
在APIClient().post()
视图中添加 JSON 渲染器和解析器......但multiple_payload
不起作用。
真正让我失望的部分get_serializer_class runs
是甚至没有为multiple_payload
我认为这可能与视图的create
方法有关,但这甚至也不适用于multiple payload
.
解决方案
推荐阅读
- magento - 有没有办法在侧边栏中添加主导航的一部分?
- javascript - Angular:一个formControlName中的多个字段,反应形式
- date - 使用 awk 和日期在一行中更改文本文件的 gmt
- web2py - web2py如何在另一个动作/视图上链接网格
- python - 如何释放分配给嵌套 numpy 数组的内存?
- php - 如何防止通过双击提交
- linux - 在 FFMPEG 中选择出站 IP(eth0 或 eth1)
- c++ - 为什么在以下示例中我需要在 block_cache.h 之前包含 block_cache_key.h 和 block.h?
- java - 将Java中的二进制文件读取到特定的“%%EOF”标记?
- php - check id in all tables have the prefix table_