Различный сериализатор для представления 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
.