gpt4 book ai didi

python - 序列化用户模型

转载 作者:行者123 更新时间:2023-11-28 19:04:43 24 4
gpt4 key购买 nike

我有以下代码应该返回我网站中注册的所有用户,但由于某种原因它只返回我最后一个签名的用户,我需要我的 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')

并向我抛出这个,即使我有不止一个用户注册。

My JSON

最佳答案

这就是你的问题所在:

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 rest 框架和 APIView,因此您不需要 json.dumps

django 框架有一个 Response 类来处理这个问题,它还会设置适当的 header 。

from rest_framework.response import Response

然后将您的返回声明更改为:

return Response(dictionary)

关于python - 序列化用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com