我收到了一个错误,
/ 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')
,所以我真的不明白为什么会发生这个错误。我已经运行了模型迁移命令。我怎样才能解决这个问题?
我理想的网页就像
答案 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
状态`中,您将收到错误