python - Django“str”对象没有属性“数据”
问题描述
当我尝试在 django 的数据库中保存帖子时出现此错误。
我做错了什么,我该如何解决?
/account/create-post 处的 AttributeError
“str”对象没有属性“data”
我有这个领域
我的模型:
class Post(models.Model):
created_date = models.DateTimeField()
title = models.CharField(max_length=100)
profile_image = models.ImageField(upload_to='poze', blank=True, null=True)
text = models.CharField(max_length=1000, default='Nimic', blank=True)
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
看法:
class CreatePost(APIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'create_post.html'
def get(self,request):
serializer=CreatePostSerializer()
return Response({'fields':serializer})
def post(self, request):
serializer = CreatePostSerializer(data=request.data)
if not serializer.is_valid():
return Response({'serializer': serializer.data})
user = UserProfile.objects.filter(username=request.user.username).first()
serializer.save(user=user)
return redirect('mainPage')
创建_post.html:
{% extends 'base.html' %}
{% load rest_framework %}
{% block content %}
<div class="offset-3 col-md-6">
<form action="{% url 'create_post' %}" method="POST">
<div class="form-group">
{% csrf_token %}
{% render_form fields %}
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
{% endblock %}
网址:
url(r'create-post$', login_required(CreatePost.as_view()), name='create_post'),
控制台中有什么:
Internal Server Error: /account/create-post Traceback (most recent call last): File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
response = get_response(request) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py", line 158, in _get_response
response = self.process_exception_by_middleware(e, request) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py", line 156, in _get_response
response = response.render() File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\response.py", line 106, in render
self.content = self.rendered_content File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\rest_framework\response.py", line 72, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\rest_framework\renderers.py", line 176, in render
return template.render(context, request=request) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 175, in render
return self._render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 167, in _render
return self.nodelist.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\loader_tags.py", line 155, in render
return compiled_parent._render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 167, in _render
return self.nodelist.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\loader_tags.py", line 67, in render
result = block.nodelist.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\django\template\library.py", line 192, in render
output = self.func(*resolved_args, **resolved_kwargs) File "C:\Users\Intern\AppData\Local\Programs\Python\Python36\lib\site-packages\rest_framework\templatetags\rest_framework.py", line 84, in render_form
return renderer.render(serializer.data, None, {'style': style}) AttributeError: 'str' object has no attribute 'data' [10/Aug/2018 17:51:09] "POST /account/create-post HTTP/1.1" 500 147258
解决方案
问题似乎出在以下函数中View
:
def post(self, request):
serializer = CreatePostSerializer(data=request.data) <---- ERROR
if not serializer.is_valid():
return Response({'serializer': serializer.data})
request
参数的类型是,str
而不是对象,因此AttributeError
当尝试访问data
a 的不存在属性时str
。我对 Django 并不完全熟悉,但根据我对 HTTP 请求和客户端-服务器“东西”的一些了解,我假设request
它作为字符串传递,需要被解析并转换为对象。
推荐阅读
- javascript - 谷歌验证码不工作
- python - OSError:[Errno 49] 无法分配请求的地址
- python - python的非线性回归-更好地拟合这些数据的简单方法是什么?
- javascript - 如何使用 jquery 捕获 iframe 控制台输出?
- sql - Oracle 子查询返回错误
- python - 在 Keras 中使用和不使用 Sequential() 构建模型有什么区别?
- vba - 如何计算数组中的重复值(VBA)?
- html - 纯 CSS - 几个 阅读更多 阅读更少
- javascript - 如果 Raw 上的 D 包含 Yes Google Sheets,我想将行复制到数据表
- c# - 重新定义列表的内容类型