将 Django Rest Framework 与序列化器一起使用时出现 AttributeError

2024-02-25

我正在关注位于的教程here https://godjango.com/41-start-your-api-django-rest-framework-part-1/使用Django 休息框架 http://www.django-rest-framework.org/,并且我不断收到有关字段的奇怪错误。

我的模型中有以下模型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()

然后我的序列化器在serializers.py

from rest_framework import serializers

from task.models import Task

class TaskSerializer(serializers.ModelSerializer):

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

and my views.py如下:

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
                )

我的 urls.py 有这一行:

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

当我尝试访问时curl http://localhost:9000/api/tasks/,我不断收到以下错误,但我不知道该怎么办:

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

我缺少什么?


简单指定many=True从查询集创建序列化器时,TaskSerializer(tasks)仅适用于一个实例Task:

tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Django Rest Framework 与序列化器一起使用时出现 AttributeError 的相关文章

随机推荐