Django ViewSet serializer_class игнорируется
У меня есть две модели: ModelA
и ModelB
, с соответствующими им сериализаторами ModelASerializer
и ModelBSerializer
В определенном наборе представлений, называемом MyViewSet
, у меня есть следующая структура:
class MyViewSetRoot(viewsets.ModelViewSet):
http_method_names = ["get"]
# The returned values are of type "ModelA", so I need it to use that serializer
serializer_class = ModelASerializer
queryset = ""
Наконец, в моем реальном представлении я делаю примерно следующее:
class MyViewSet(MyViewSetRoot):
get(self, request: HttpRequest, *args, **kwargs) -> Response:
ModelA_queryset = ModelA.objects.all()
return Response(
data=ModelA_queryset,
status=status.HTTP_200_OK,
)
В этом случае я ожидал бы, что набор запросов будет сериализован с использованием ModelASerializer
, который я указал в поле serializer_class
. Однако я получаю ошибку
Object of type ModelA is not JSON serializable
Если я сделаю это вместо:
class MyViewSet(MyViewSetRoot):
get(self, request: HttpRequest, *args, **kwargs) -> Response:
ModelA_queryset = ModelA.objects.all()
serialized_queryset = ModelASerializer(ModelA_queryset, many=True)
return Response(
data=serialized_queryset.data,
status=status.HTTP_200_OK,
)
Это работает просто отлично, но я хочу избежать явной сериализации в представлении.
Есть идеи, что на самом деле может происходить? Вынужден ли я в этом случае явно сериализовать?
Я думаю, что вам не нужно настраивать функцию get. В ModelViewSet, функция для API GET, это list
или retrieve
. Но вам не нужно переопределять ее.
class MyViewSetRoot(viewsets.ModelViewSet):
http_method_names = ["get"]
serializer_class = ModelASerializer
queryset = ModelA.objects.all()
class MyViewSet(MyViewSetRoot):
pass