python - django rest框架中的“getattr():属性名必须是字符串”
问题描述
报错“getattr(): attribute name must be string”,不知道怎么解决,
视图.py:
class VideoViewset(ResponseViewMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
def post(self, request, *args, **kwargs):
try:
serializer = VideoSerializers(data=request.data)
if not serializer.is_valid():
return self.jp_error_response('HTTP_400_BAD_REQUEST', self.error_msg_list(serializer.errors))
serializer.save()
return self.jp_response(s_code='HTTP_201_CREATED', data={'video': serializer.data})
except Exception as e:
print(e)
return self.jp_error_response('HTTP_500_INTERNAL_SERVER_ERROR', 'EXCEPTION', [str(e), ])
序列化程序.py:
class VideoSerializers(serializers.ModelSerializer):
class Meta:
model = Video
fields = ('video_type', 'relevance', 'difficulty', 'category', 'sub_category')
模型.py:
class Video(BaseModel, Timestamps, SoftDelete):
relevance_difficulty_choices = (
('low', 'Low'),
('medium', 'Medium'),
('high', 'High')
)
video_type_choices = (
('micro', 'Micro'),
('mini', 'Mini'),
('grand', 'Grand')
)
create_date = models.DateTimeField(auto_now_add=True, null=True)
video_type = models.CharField(max_length=50, choices=video_type_choices, null=False)
relevance = models.CharField(max_length=50, choices=relevance_difficulty_choices, null=False)
difficulty = models.CharField(max_length=50, choices=relevance_difficulty_choices, null=False)
category = models.CharField(max_length=254, null=False, blank=False)
sub_category = models.CharField(max_length=254, null=False, blank=False)
created_by = models.ForeignKey(Employee, null=True, on_delete=models.CASCADE)
contributer = models.CharField(max_length=254, null=False)
file_url = models.CharField(max_length=254, null=True, blank=False)
网址.py:
router = routers.SimpleRouter(trailing_slash=False)
router.register(r'categories', VideoCategoryViewSet, 'all-video-categories')
router.register(r'search', VideoListViewset, 'search')
router.register(r'video-add', VideoViewset, 'video-add')
这是我的回溯:
System check identified no issues (0 silenced).
April 01, 2021 - 12:06:22
Django version 3.1.3, using settings 'main.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
getattr(): attribute name must be string
Internal Server Error: /api/e/video/video-add
"POST /api/e/video/video-add HTTP/1.1" 500 115
getattr(): attribute name must be string
Internal Server Error: /api/e/video/video-add
"POST /api/e/video/video-add HTTP/1.1" 500 115
getattr(): attribute name must be string
Internal Server Error: /api/e/video/video-add
我是 django 的初学者,我做错了什么?这里使用邮递员检查,显示上述错误。
解决方案
推荐阅读
- javascript - JavaScript 延迟 Chrome Addlistener
- java - 带有尾随逗号的有效 Excel 自定义数字被 DecimalFormat 视为格式错误
- asp.net-mvc - 使用什么表达式我可以从集合中获取单个项目的 ModelMetadata 信息?
- android - 图像视图完全折叠时如何隐藏文本视图
- postgresql - 从终端将表及其行上传到 postgress Schema
- vba - 是否有一种方法可以根据列表框列之一的条件在列表框中查找值?
- javascript - 由于另一个服务注入,服务找不到依赖项
- javascript - 通过流将数据块写入 S3 文件,而不是创建临时文件 Node.js
- python - 如何合并或连接两个数据框,但保留两者的某些列
- git - 在我正在完成一些工作的功能分支上为 github 开发一个分叉的 repo