18

ile kullanırken AttributeError Django Rest Framework kullanan here numaralı dersi takip ediyorum ve bir alan hakkında garip bir hata alıyorum.Django Rest Framework ürününü

Ben aşağıdaki modeli benim 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() 

Sonra serializers.py

from rest_framework import serializers 

from task.models import Task 

class TaskSerializer(serializers.ModelSerializer): 

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

ve benim views.py benim serileştirici şöyle:

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 
       ) 

ve benim urls.py vardır bu satır:

01 Ben curl http://localhost:9000/api/tasks/ erişen yapmaya çalışırken
url(r'^tasks/$', 'task_list', name='task_list'), 

, aşağıdaki hatayı almaya devam ve bunu yapmak için emin değilim:

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

Ben ne kaçırıyorum?

cevap

54

Basit many=True belirtin TaskSerializer(tasks)Task bir örneğini sadece çalışacaktır:

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

Bu iyi benim için çalıştı. Teşekkürler. – Frankline

+0

Bunun için teşekkürler, genellikle ListSerializers yaratıyordum ama şimdi biliyorum. Teşekkürler şampiyonu. –

+0

Meleklerin bir ismi var .. son beş gündür bu konuya sıkışmış .. –

4

Burada sorun, bir Queryset (liste) girişini tek bir girdiye dönüştürmeye çalıştığınızdır. Çözüm bu çizgiler boyunca bir şeydir. sorgu grubu bir seri hale oluştururken

from rest_framework import serializers 

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

Sonra

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