Некоторые рекомендации по структуре json для сериализатора django DRF

У меня есть модель, структура которой выглядит следующим образом:

model:
    server_name: str
    description: str
    owner: str

но приложение, отправляющее данные в мое приложение, использует формат json, для которого я не знаю, как создать сериализатор. Для нескольких записей это выглядит следующим образом

{
    "server1": {
        "description": "desc of server 1",
        "owner": "service name"    },
    "server2": {
        "description": "desc of server 2",
        "owner": "service name"
    }
}

но я не уверен, как преобразовать его в нечто, соответствующее моей модели. Вот структура, которую я хотел бы видеть в сериализаторе

[
    {
        "server_name": "server1", 
        "description": "desc of server 1",
        "owner": "service name"
    },
    {
        "server_name": "server2", 
        "description": "desc of server 2",
        "owner": "service name"
    }
]

Есть предложения по этому поводу?

с помощью документации ListField можно попробовать следующее:

serializers.py:

from rest_framework import serializers

class ServerSerializer(serializers.Serializer):
    jsonData = serializers.ListField(
        child=serializers.JSONField()
    )

views.py:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import ServerSerializer

class ServerAPIView(APIView):
    serializer_class = ServerSerializer

    def post(self, request):
        data = request.data
        serializer = self.serializer_class(data=data)
        serializer.is_valid(raise_exception=True)

        # Get data
        json_data = data.get('jsonData')
        for item in json_data:
            server_name = item['server_name']
            description = item['description']
            owner = item['owner']
            YourModel.objects.get_or_create(
                    server_name=server_name, description=description, 
            owner=owner)
        result = YourModel.objects.all()
        serializer = self.serializer_class(result, many=True)

        return Response(serializer.data, status=status.HTTP_201_CREATED)
Вернуться на верх