В DRF, как получить формат словаря в JSON-ответе, а не список dcitionaries

Как получить формат словаря в ответе JSON, а не список словарей. Сейчас я получаю ответ в виде списка словарей, а хочу получить ответ без списка.

#Ответ я получаю, например

[
    {
        "id": 40,
        "full_name": "Don Ser 1",
        "email": "Donny@sfds.com",
        "phone": 12345,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
   
    },
    {
        "id": 41,
        "full_name": "Don Ser 2",
        "email": "Donny@sfds.com",
        "phone": 121356456,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
    
    }
]

#Ответ, который я хочу получить, без списка.

[
    {
        "id": 40,
        "full_name": "Don Ser 1",
        "email": "Donny@sfds.com",
        "phone": 12345,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
     
    },
    {
        "id": 41,
        "full_name": "Don Ser 2",
        "email": "Donny@sfds.com",
        "phone": 121356456,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
  
    }
}

Как мне этого добиться? Кроме того, я хотел бы знать, почему он возвращает его в списке, а не в словаре?

Если вы хотите вернуть дикту, вы должны определить структуру, например,

{'results': [
 {
        "id": 40,
        "full_name": "Don Ser 1",
        "email": "Donny@sfds.com",
        "phone": 12345,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
     
    },
    {
        "id": 41,
        "full_name": "Don Ser 2",
        "email": "Donny@sfds.com",
        "phone": 121356456,
        "address_line_1": "sdsdsdsd",
        "address_line_2": "dsdsdsd",
  
    }
]}

Но просто вернуть dict без ключа невозможно.

Если вы возвращаете свой ответ в DRF с serializer.data, то проще всего добиться этого следующим образом:

return Response(serializer.data[0], status=status.HTTP_200_OK)

Если вы хотите включить весь словарь в другой словарь, вам придется дать ему ключ, так что это будет выглядеть примерно так:

return Response({"results":serializer.data[0]}, status=status.HTTP_200_OK)

В противном случае, если вы используете его для простого элемента, вы можете просто указать его так, как вам нужно, т.е. :

serializer = Serializer(data=request.data)
if serializer.is_valid():
    device = serializer.save()
    return Response({"pk": device.id}, status=status.HTTP_201_CREATED)
Вернуться на верх