python - queryset - extra kwargs django rest
AttributeError al utilizar Django Rest Framework con serializadores (2)
El problema aquí es que está intentando convertir un Queryset (lista) de entradas en una sola entrada. La solución es algo en este sentido.
from rest_framework import serializers
class TaskListSerializer(serializers.ListSerializer):
child = TaskSerializer()
allow_null = True
many = True
Entonces
if request.method == ''GET'':
tasks = Task.objects.all()
serializer = TaskListSerializer(tasks)
return Response(serializer.data)
Estoy siguiendo un tutorial que se encuentra here que utiliza el Marco de descanso de Django y me sigue dando un error extraño sobre un campo
Tengo el siguiente modelo en mi models.py
from django.db import models
class Task(models.Model):
completed = models.BooleanField(default=False)
title = models.CharField(max_length=100)
description = models.TextField()
Entonces mi serializador en serializers.py
from rest_framework import serializers
from task.models import Task
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = (''title'', ''description'', ''completed'')
y mi views.py
como sigue:
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from task.models import Task
from api.serializers import TaskSerializer
@api_view([''GET'', ''POST''])
def task_list(request):
"""
List all tasks, or create a new task
"""
if request.method == ''GET'':
tasks = Task.objects.all()
serializer = TaskSerializer(tasks)
return Response(serializer.data)
elif request.method == ''POST'':
serializer = TaskSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(
serializer.errors, status=status.HTTP_400_BAD_REQUEST
)
y mi urls.py tiene esta linea:
url(r''^tasks/$'', ''task_list'', name=''task_list''),
Cuando intento acceder a curl http://localhost:9000/api/tasks/
, sigo recibiendo el siguiente error y no estoy seguro de qué hacer con él:
AttributeError at /api/tasks/
Got AttributeError when attempting to get a value for field `title` on serializer `TaskSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: ''QuerySet'' object has no attribute ''title''.
¿Qué me estoy perdiendo?
Simplemente especifique many=True
cuando cree un serializador desde queryset, TaskSerializer(tasks)
funcionará solo con una instancia de Task
:
tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)