Python Django rest api问题:hasattr():属性名称必须为字符串
我正在创建一个简单的博客应用程序,并尝试转换django rest api。但是,我得到了这个错误 TypeError at/user/api/hasattr():属性名称必须是字符串 异常类型:在/user/api/ 异常值:hasattr():属性名称必须是字符串 这是我的models.py文件Python Django rest api问题:hasattr():属性名称必须为字符串,python,django,python-3.x,django-models,django-rest-framework,Python,Django,Python 3.x,Django Models,Django Rest Framework,我正在创建一个简单的博客应用程序,并尝试转换django rest api。但是,我得到了这个错误 TypeError at/user/api/hasattr():属性名称必须是字符串 异常类型:在/user/api/ 异常值:hasattr():属性名称必须是字符串 这是我的models.py文件 from django.conf import settings from django.db import models from django.urls import reverse clas
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})
from rest_framework import serializers
from blog.models import BlogPost
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
model=BlogPost
from django.urls import path,include
from .views import SignUpForm, UserProfiles
from .api.views import *
urlpatterns = [
path('signup/', SignUpForm.as_view(), name='signup'),
path('profile/', UserProfiles.as_view(), name='profile'),
path('api/', BlogPostListAPI.as_view(), name='asad'),
path('api/<int:pk>', BlogPostListAPIDetail.as_view()),
]
这是我的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})
from rest_framework import serializers
from blog.models import BlogPost
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
model=BlogPost
from django.urls import path,include
from .views import SignUpForm, UserProfiles
from .api.views import *
urlpatterns = [
path('signup/', SignUpForm.as_view(), name='signup'),
path('profile/', UserProfiles.as_view(), name='profile'),
path('api/', BlogPostListAPI.as_view(), name='asad'),
path('api/<int:pk>', BlogPostListAPIDetail.as_view()),
]
这是views.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
这是url.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})
from rest_framework import serializers
from blog.models import BlogPost
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
model=BlogPost
from django.urls import path,include
from .views import SignUpForm, UserProfiles
from .api.views import *
urlpatterns = [
path('signup/', SignUpForm.as_view(), name='signup'),
path('profile/', UserProfiles.as_view(), name='profile'),
path('api/', BlogPostListAPI.as_view(), name='asad'),
path('api/<int:pk>', BlogPostListAPIDetail.as_view()),
]
从django.url导入路径,包括
从.views导入注册表单、用户配置文件
从.api.views导入*
URL模式=[
路径('signup/',SignUpForm.as_view(),name='signup'),
路径('profile/',UserProfiles.as_view(),name='profile'),
路径('api/',BlogPostListAPI.as_view(),name='asad'),
路径('api/',BlogPostListAPIDetail.as_view()),
]
这是屏幕截图
正如@MaNKuR在对该问题的评论中指出的,在
元字段的末尾,序列化程序定义中还有一个逗号:
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
fields=(
'author',
'blog_title',
'blog_description',
),
因此,Meta.fields
现在是一个“字符串元组的元组”,而不仅仅是一个“字符串元组”
当迭代字段时
,而不是预期的三个字符串元素
1. 'author'
2. 'blog_title'
3. 'blog_description'
只有一个元素不是字符串
1. ('author', 'blog_title', 'blog_description')
因此,序列化程序的内部代码抱怨它没有得到它应该得到的字符串。看不到在哪里使用hasttr
所有代码共享。但是我不知道怎么才能得到这个错误。另外,我没有使用hasttr。单击开关复制并粘贴视图
,并将该错误粘贴到更新的错误中。应该列出它崩溃的地方。在BlogPostSerializer
中删除模型前面的逗号“,”你说得对,MaNKuR