[英]AttributeError while using Django Rest Framework with serializers
I am following a tutorial located here that uses Django Rest Framework , and I keep getting a weird error about a field. 我正在按照这里使用Django Rest Framework的教程进行操作,并且我不断得到关于字段的奇怪错误。
I have the following model in my models.py
我的
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()
Then my serializer in serializers.py
然后我在
serializers.py
中的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
as follows: 和我的
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
)
and my urls.py has this line: 我的urls.py有这一行:
url(r'^tasks/$', 'task_list', name='task_list'),
When I try accessing curl http://localhost:9000/api/tasks/
, I keep getting the following error and I'm not sure what to make of it: 当我尝试访问
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'.
What I'm I missing? 我错过了什么?
Simple specify many=True
when creating a serializer from queryset, TaskSerializer(tasks)
will work only with one instance of Task
: 在从queryset创建序列化程序时,简单指定
many=True
, TaskSerializer(tasks)
将仅对Task
一个实例起作用:
tasks = Task.objects.all()
serializer = TaskSerializer(tasks, many=True)
The problem here is that you are trying to convert a Queryset(list) of entries into a single entry. 这里的问题是您正在尝试将条目的Queryset(列表)转换为单个条目。 The solution is something along these lines.
解决方案就是这样。
from rest_framework import serializers
class TaskListSerializer(serializers.ListSerializer):
child = TaskSerializer()
allow_null = True
many = True
Then 然后
if request.method == 'GET':
tasks = Task.objects.all()
serializer = TaskListSerializer(tasks)
return Response(serializer.data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.