Unable to fetch user details by an id given in a JSON string | Getting a Type error in Django

Viewed 18

I am trying to get a user's details (in a JSON string format) by providing a user id (also in a JSON string format)

This is my model's code

    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}"

This is the serializer Code

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__"

This is the views code

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)

Whenever I enter a JSON data in the body of URL eg: {"id":"2"} I get this error

[TypeError at /describe/ Object of type UserSerializer is not JSON serializable]

1 Answers

It looks like you are passing the Serializer Object Itself..

Per: rest-framework tut serialization, It looks like you must specify .data
Their example:

serializer = SnippetSerializer(snippet)
serializer.data
# {'id': 2, 'title': '', 'code': 'print("hello, world")\n', 'linenos': False, 'language': 'python', 'style': 'friendly'}

It would lead to something like this:

@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)
Related