我想创建一个API端点来通过djangoRestAPI中的属性“user_id”获取用户和用户配置文件,user_id将由客户端发送

问题描述 投票:0回答:2

模型.py

class User_profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, blank=False)
    phone = models.CharField(max_length=20, blank=False)
    profileImg = models.ImageField(upload_to='User/Profile_Picture', default='User/Profile_Picture/logo.png')
    city = models.CharField(max_length=50, blank=False, default=None)
    state = models.CharField(max_length=50, blank=False, default=None)
    birthdate = models.DateField(blank=False)
    bio = models.TextField(max_length=1000, blank=True, null=True)
    privacy = models.CharField(max_length=20, choices=PRIVACY_CHOICES, default='public', blank=False)
    requests = models.ManyToManyField(User, related_name='follow_request_user', default=None, blank=True)
    verified = models.BooleanField(default=False, blank=False)
    following_user = models.ManyToManyField(User, related_name='following_user', default=None, blank=True)

    followers = models.ManyToManyField(User, related_name='user_followers', default=None, blank=True)

    objects = models.Manager()

    def __str__(self):
        return self.name

序列化器.py

from rest_framework import serializers
from .models import *


class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User_profile
        fields = "__all__"

**api_views.py **

from django.shortcuts import get_object_or_404
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializer import *
from .models import *


class ProfileAPI(APIView):
    def get(self, request, *args, **kwargs):
        user = get_object_or_404(User, id=kwargs['user_id'])
        profile_serializer = ProfileSerializer(user,many=True)
        return Response(profile_serializer.data)

**api_urls.py **

from django.urls import path

from . import api_views

urlpatterns = [
    path('profile/<user_id>', api_views.ProfileAPI.as_view(), name="profile")


]

我想要 JSON 格式的响应,以便我可以在 Android 应用程序中使用它。我浏览了很多博客和 Stackoverflow 答案,但其中任何一个都没有给出所需的输出

简而言之,我只是希望客户端发送一个用户 ID 并获取 json 格式的 User 和 UserProfile

获取“TypeError:'User'对象不可迭代”作为输出

django django-models django-rest-framework django-views django-serializer
2个回答
0
投票

您需要大量改进您的代码。无论如何,为了让用户只需从 ProfileSerializer 中删除

many=True
即可。


0
投票

如果您想解决代码问题,只需从 ProfileSerializer 中删除

many=True

当我们将模型对象列表传递给序列化器时,我们希望以 LIST 的形式响应,

many=True
被传递。


这是上述用例的更简洁的实现

api_views.py

from rest_framework.response import Response
from rest_framework.generics import RetrieveAPIView
from .serializer import *
from .models import *

class ProfileAPI(RetrieveAPIView):
    serializer_class = ProfileSerializer
    queryset = User_profile.objects.all()

urls.py

urlpatterns = [
    path('profile/<int:pk>', api_views.ProfileAPI.as_view(), name="profile")

]
© www.soinside.com 2019 - 2024. All rights reserved.