我的API仅返回值。我相信这是我的错,但是对于Python / Django来说不是很通用。任何帮助表示赞赏。
返回的内容
"This is the message"
我想要的:
{
"message": "This is a message"
}
我要做的就是添加一个单词作为key
views.py
from rest_framework.response import Response
from id.models import Id
from rest_framework import generics
from id.serializers import IdSerializer
from django.http import Http404
from IPython import embed
class OfferView(generics.RetrieveAPIView):
serializer_class = IdSerializer
lookup_field = 'id'
def get_queryset(self):
id = self.kwargs['id']
try:
return Id.objects.filter(id=id)
except Mamo.DoesNotExist:
raise Http404
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
serializer = self.serializer_class(queryset, many=True)
try:
if serializer.data[0]['offer_id'] is not None:
result = serializer.data[0]['main_offer']
elif serializer.data[0]['offer_id'] is None:
result = serializer.data[0]['extra_offer']
else:
result = serializer.data[0]['exceptional_offer']
return Response(result)
except IndexError:
raise Http404
答案 0 :(得分:1)
只是改变
注意:问题就是您将要得到的形式,只是返回了
string
,这就是问题所在。现在,让我们将其转换为字典(更确切地说是REST中的JSON)。serializer.data 是字典。您可以形成一个包含所需键和值(可序列化JSON)的单个字典。在这里,我只是试图满足需求。
result = serializer.data[0]['exceptional_offer']
到
result = {"message": serializer.data[0]['exceptional_offer']}
和其他类似的东西。
更好的方式:
只需更改以下内容(最后几行,我的意思是try...except
)
try:
if serializer.data[0]['offer_id'] is not None:
result = serializer.data[0]['main_offer']
elif serializer.data[0]['offer_id'] is None:
result = serializer.data[0]['extra_offer']
else:
result = serializer.data[0]['exceptional_offer']
return Response(result)
except IndexError:
raise Http404
转到下一个(写相同的代码就像重复代码一样。)
try:
if serializer.data[0]['offer_id'] is not None:
# result = serializer.data[0]['main_offer']
key = 'main_offer'
elif serializer.data[0]['offer_id'] is None:
# result = serializer.data[0]['extra_offer']
key = 'extra_offer'
else:
# result = serializer.data[0]['exceptional_offer']
key = 'exceptional_offer'
result = {'message': serializer.data[0][key]}
return Response(result)
except IndexError:
raise Http404
答案 1 :(得分:0)
因此,我发现只是返回Public
而不创建JSON对象。
在result
条件下将result = {'message': serializer.data[0]…}
添加到所有变量result
可以为我解决。