Различный сериализатор для представления Create в зависимости от типа данных запроса?

Я пытаюсь создать представление Create, которое позволяет создавать один объект или вложенные объекты в зависимости от того, является ли полезная нагрузка словарем или списком соответственно.

# 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 renderer и parser в представление... но multiple_payload не работает.

Часть, которая действительно сбивает меня с толку, это тот факт, что get_serializer_class runs даже не печатается для multiple_payload

Я подумал, что это может быть связано с методом представления create, но он также не работает для multiple payload.

Вернуться на верх