Как я могу получить более одного атрибута из сериализатора

Мои модели имеют несколько атрибутов, все они сериализуются.

В соответствии с запросом пользователя, я хочу, чтобы мой API возвращал только ограниченную информацию

Это код моей модели

from django.db import models
  
class User(models.Model):
    name = models.CharField(max_length=50)
    age = models.PositiveSmallIntegerField()
    description = models.CharField(max_length=200)
  
    def __str__(self) -> str:
        return self.name

Это код моего Serializer'а

from rest_framework import serializers
from .models import User
  
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"

Это код моего представления

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import User
from .serializers import UserSerializer
from rest_framework import serializers
from rest_framework import status
from django.http import JsonResponse

@api_view(['GET'])
def viewUsers(request):
    users = User.objects.all()
    serializer = UserSerializer(users, many=True)
    return JsonResponse({'id': serializer.data['id'], 'name': serializer.data['name']})

Код ниже работает, если я хочу вернуть один атрибут/поле

return JsonResponse(serializer.data['id'])

но когда я пытаюсь получить более одного атрибута методом словаря, он выдает ошибку

индексы списка должны быть целыми числами или фрагментами, а не str

many=True, переданный в UserSerializer, указывает, что serializer.data будет содержать list из dict, где каждый конкретный dict будет результатом сериализации User экземпляра в ожидаемый dict

Учитывая, что serializer.data является списком, то при попытке выполнить serializer.data['id'] возникает

индексы списка должны быть целыми числами или фрагментами, а не str

Возможно, вы захотите обновить утверждение return до

return JsonResponse([{'id': item['id'] for item in  serializer.data}])

или указать, что вы ожидаете, что только id поле будет возвращено сериализатором

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("id",)

и затем в представлении

    return JsonResponse(serializer.data)
Вернуться на верх