Невозможно получить данные о пользователе по идентификатору, заданному в строке JSON | Получение ошибки типа в Django
Я пытаюсь получить данные пользователя (в формате строки JSON), предоставив идентификатор пользователя (также в формате строки JSON)
Это код моей модели
class Description(models.Model):
description = models.CharField(max_length=150)
def __str__(self):
return self.description
class Team(models.Model):
team_name = models.CharField(max_length=50)
description = models.CharField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.team_name
class User(models.Model):
name = models.CharField(max_length=64)
username = models.CharField(max_length=64, unique=True)
description = models.ForeignKey(Description, null=True, on_delete=models.SET_NULL)
team = models.ForeignKey(Team, null=True, on_delete=models.SET_NULL)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.name}"
Это код сериализатора
from rest_framework import serializers
from users.models import Description, Team, User
class DescriptionSerializer(serializers.ModelSerializer):
class Meta:
model = Description
fields = "__all__"
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
fields = "__all__"
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"
Это код представления
from urllib import response
from django.shortcuts import render
from django.http import JsonResponse
from rest_framework.response import Response
from rest_framework.decorators import api_view
from users.models import User, Team, Description
from .serializers import UserSerializer, TeamSerializer, DescriptionSerializer
# describe user
@api_view(["GET"])
def describe_user(request):
user = User.objects.get(pk=request.data["id"])
serializer = UserSerializer(user)
return JsonResponse(serializer, safe=False)
Когда я ввожу данные JSON в тело URL, например: {"id": "2"}. я получаю эту ошибку
[TypeError at /describe/ Объект типа UserSerializer не является JSON сериализуемым]
Похоже, что вы передаете сам объект сериализатора
Пер: rest-framework tut serialization, Похоже, что вы должны указать .data
.
Их пример:
serializer = SnippetSerializer(snippet)
serializer.data
# {'id': 2, 'title': '', 'code': 'print("hello, world")\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}
Это привело бы к чему-то вроде этого:
@api_view(["GET"])
def describe_user(request):
user = User.objects.get(pk=request.data["id"])
serializer = UserSerializer(user)
# debuggers
print(type(serializer), serializer)
print(type(serializer.data), serializer.data)
return JsonResponse(serializer.data, safe=False)