Как я могу получить более одного атрибута из сериализатора
Мои модели имеют несколько атрибутов, все они сериализуются.
В соответствии с запросом пользователя, я хочу, чтобы мой 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)