首页 > 解决方案 > 根据 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.

标签: djangodjango-rest-framework

解决方案


推荐阅读