我正在创建一个简单的博客应用程序,我正在尝试转换django rest api。但是,我得到了错误
/ user / api / hasattr()中的TypeError:属性名称必须为字符串
异常类型:/ user / api /
中的TypeError异常值:hasattr():属性名称必须为字符串
这是我的 models.py 文件
else
这是我的 serializers.py 文件
from django.conf import settings
from django.db import models
from django.urls import reverse
class BlogPost(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
blog_title=models.CharField(max_length=200)
blog_description=models.TextField()
blog_pub=models.DateTimeField(auto_now_add=True)
blog_update=models.DateTimeField(auto_now=True)
def __str__(self):
return self.blog_title
def get_absolute_url(self):
return reverse('blog:blog_post', kwargs={'pk': self.pk})
这是 views.py 文件
from rest_framework import serializers
from blog.models import BlogPost
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
model=BlogPost
这是 urls.py 文件
from blog.models import BlogPost
from .serializers import BlogPostSerializer
from rest_framework import generics
from . import serializers
from . import serializers
class BlogPostListAPI(generics.ListCreateAPIView):
queryset=BlogPost.objects.all()
serializer_class=BlogPostSerializer
class BlogPostListAPIDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = BlogPost.objects.all()
serializer_class = serializers.BlogPostSerializer
答案 0 :(得分:2)
正如@MaNKuR在对该问题的评论中指出的那样,Meta.fields
末尾的序列化定义中还有一个额外的逗号:
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
因此,Meta.fields
现在是"字符串元组的元组"而不只是一个"字符串元组"。
迭代fields
时,而不是预期的三个字符串元素
1. 'author'
2. 'blog_title'
3. 'blog_description'
你只得到一个不是字符串的元素
1. ('author', 'blog_title', 'blog_description')
因此,Serializer的内部代码抱怨它没有得到它应该得到的字符串。