Django REST Framework не может отправить несколько данных

Я пытаюсь отправить несколько данных JSON в одном POST в виде списка, как -

[
 {
    "name": "data",
 },
 {
    "name": "data",
 }
]

но получаем следующую ошибку.

{
"non_field_errors": [
    "Invalid data. Expected a dictionary, but got list."
]
}

Вот мои коды -

Serializers.py

class my_serializer_name(serializers.ModelSerializer):
class Meta:
    model = my_model
    fields = '__all__'

def validate(self, data):
    #Performing validation
    ......
    ......

viewsets.py

class my_viewset(viewsets.ModelViewSet):
queryset = models.my_model.objects.all()
serializer_class = serializers.my_serializer
http_method_names = ['get', 'post']

def list(self, request):
    # Note the use of `get_queryset()` instead of `self.queryset`
    queryset = self.get_queryset()
    serializer = serializers.my_serializer(queryset, many=True)
    return Response(serializer.data)

router.py

router = routers.DefaultRouter()
router.register('name' , my_viewset)

Как решить эту проблему?

Один из способов сделать это - переопределить метод post для указания сериализатора: вместо сериализатора по умолчанию использовать many=True

def post(self, request):
    serialized = my_serializer_name(data=request.data, many=True)
    serialized.is_valid(raise_exception=True)
    serialized.save()

Я добавил метод Create в файл viewsets.py и, кажется, он работает нормально.

def create(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data, many=isinstance(request.data,list))
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Вернуться на верх