我有以下代码应该返回我在我的网站中注册的所有用户,但由于某种原因它只是返回给我最后签名的用户,我需要我的JSON中的所有用户。
from django.shortcuts import render, redirect
import json
from django.http import HttpResponse
from rest_framework.response import Response
from rest_framework.views import APIView
from profiles.serializers import ProfileSerializer
from django.contrib.auth.models import User
from rest_framework.decorators import api_view
class ProfilesAPI(APIView):
serializer = ProfileSerializer
def get(self, request, format=None):
users = User.objects.all()
response = self.serializer(users, many=True)
for j in range(0,len(response.data)):
dictionary = response.data[j]
myresponse = ""
for i, (val, v) in enumerate(dictionary.items()):
myresponse = [{"text":v} for v in dictionary.values()]
print(myresponse)
return HttpResponse(json.dumps({'messages': myresponse}), content_type='application/json')
然后把我扔了,即使我注册了多个用户。
答案 0 :(得分:0)
这就是你的问题所在:
dictionary = response.data[j]
您声明字典,同时声明循环中具有最新值的现有值。当循环退出时,字典将只包含一个结果(循环中的最后一个)
你应该在循环之外声明它,然后调用dict.update
这样的东西:
dictionary = {}
for j in range(0,len(response.data)):
dictionary.update(response.data[j])
这解决了你的问题。
但是生成这个新词典没有意义。如果您需要自定义响应,则可以在response.data
上迭代一次。
由于response.data
是用户列表,您可以执行此操作
dictionary = {'messages': []}
for user in response.data:
dictionary['messages'].append({'text': user['id']})
dictionary['messages'].append({'text': user['username']})
此外,由于您使用的是django休息框架和APIView
,因此您不需要json.dumps
django框架有一个Response
类来处理它,它还设置了适当的标题。
from rest_framework.response import Response
然后将return语句更改为:
return Response(dictionary)