/ app / api / get中的AttributeError

时间:2017-09-02 09:43:15

标签: python django django-rest-framework

我收到了一个错误, / app / api / get中的AttributeError 尝试在序列化程序task_name上获取字段TaskSerializer的值时出现AttributeError。 序列化程序字段可能名称不正确,并且与Color实例上的任何属性或键都不匹配。 原始异常文本是:'Color'对象没有属性'task_name'。

现在我想创建一个以json格式显示模型内容的页面。 models.py是

from django.db import models

# Create your models here.
class Color(models.Model):
    name = models.CharField(max_length=255)
    background_color = models.CharField(max_length=255)
    h1_color = models.CharField(max_length=255)
    p_color = models.CharField(max_length=255)

    def __str__(self):
        return self.name

serializers.py是

from .models import Color
from rest_framework import serializers

class TaskSerializer(serializers.Serializer):
    task_name = serializers.CharField(max_length=100)
    status = serializers.SerializerMethodField('get_task_status')

    def get_task_status(self, instance):
        return instance.status.status

    class Meta:
        model = Color
        fields = ('name',
                  'background_color',
                  'h1_color',
                  'p_color',
                  'task_name')

urls.py是

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'api/get',views.TaskGet.as_view(),name='task-get')
]

views.py是

from django.shortcuts import render
from .models import Color
from .forms import ColorForm
from .serializers import TaskSerializer
from rest_framework.views import APIView
from rest_framework.response import Response

from rest_framework import status

# Create your views here.
def index(request):
    d = {
        'colors': Color.objects.all(),
        'form': ColorForm(),
    }
    return render(request, 'index.html', d)

class TaskGet(APIView):
    def get(self, request, format=None):
        obj = Color.objects.all()
        serializers = TaskSerializer(obj, many=True)
        return Response(serializers.data, status.HTTP_200_OK)

我在urls.py中写了url(r'api/get',views.TaskGet.as_view(),name='task-get'),所以我真的不明白为什么会发生这个错误。我已经运行了模型迁移命令。我怎样才能解决这个问题? 我理想的网页就像 ideal page

1 个答案:

答案 0 :(得分:1)

您尝试通过外键status获取instance.status.status,但在您的模型class Color中,我没有看到任何外键或方法。

对于task_name您是否希望看到模型字段name尝试添加source params

task_name = serializers.CharField(max_length=100, source='name')
#                                                   ^^^^^^^^^

您确定要为模型Task序列化Color吗?

新修改

get_task_status'实例is instance of serializer model, so if your model颜色has no property or method状态`中,您将收到错误