В 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)