webentwicklung-frage-antwort-db.com.de

AttributeError bei Verwendung von Django Rest Framework mit Serializern

Ich verfolge ein Tutorial hier , das Django Rest Framework verwendet, und es wird immer wieder ein seltsamer Fehler in Bezug auf ein Feld angezeigt.

Ich habe das folgende Modell in meinem 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()

Dann mein Serializer in serializers.py

from rest_framework import serializers

from task.models import Task

class TaskSerializer(serializers.ModelSerializer):

    class Meta:
        model = Task
        fields = ('title', 'description', 'completed')

und mein views.py wie folgt:

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
                )

und meine urls.py hat diese Zeile:

url(r'^tasks/$', 'task_list', name='task_list'),

Wenn ich versuche, auf curl http://localhost:9000/api/tasks/ Zuzugreifen, wird immer wieder die folgende Fehlermeldung angezeigt, und ich bin nicht sicher, was ich daraus machen soll:

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'.

Was ich vermisse ich?

29
Frankline

Geben Sie einfach many=True An, wenn Sie einen Serializer aus dem Abfragesatz erstellen. TaskSerializer(tasks) funktioniert nur mit einer Instanz von Task:

tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
75

Das Problem hierbei ist, dass Sie versuchen, ein Queryset (Liste) von Einträgen in einen einzelnen Eintrag zu konvertieren. Die Lösung ist etwas in diese Richtung.

from rest_framework import serializers

class TaskListSerializer(serializers.ListSerializer):
    child = TaskSerializer()
    allow_null = True
    many = True

Dann

if request.method == 'GET':
        tasks = Task.objects.all()
        serializer = TaskListSerializer(tasks)
        return Response(serializer.data)
4
Rodney Hawkins