Python 在Django中上载带有文件字段的表单时,文件无效
我是新来的Django,正在创建一个社交网络网站来获得它。我已经制作了一个上传个人资料图片的表单,并成功地在我的模板中呈现,但当我上传它时,我得到一个名为profile_pic的错误。请帮我解决这个问题 views.py-这是我正在进行的处理。我在这里得到一个无效的表单错误,返回行HttpResponse(profilePicForm.errors)返回profile_pic作为响应 profile.html-这就是我呈现它的方式Python 在Django中上载带有文件字段的表单时,文件无效,python,django,Python,Django,我是新来的Django,正在创建一个社交网络网站来获得它。我已经制作了一个上传个人资料图片的表单,并成功地在我的模板中呈现,但当我上传它时,我得到一个名为profile_pic的错误。请帮我解决这个问题 views.py-这是我正在进行的处理。我在这里得到一个无效的表单错误,返回行HttpResponse(profilePicForm.errors)返回profile_pic作为响应 profile.html-这就是我呈现它的方式 {%csrf_令牌%} {{profilePicForm.as
{%csrf_令牌%}
{{profilePicForm.as_p}
上传
通常的做法是,如果表单无效,则呈现相同的模板,以查看网页上的错误消息,因此,您不必返回HttpResponse(profilePicForm.errors)而应执行以下操作:
if profilePicForm.is_valid():
return HttpResponse("<h1>Valid</h1>")
profilePic = ProfilePictures()
query = UserInfo.objects.filter(id=id)
for user in query:
profilePic.user = user
break
profilePic.profile_pic = profilePicForm.cleaned_data['profile_pic']
profilePic.save()
return redirect('newsfeed:profile')
else:
return render(request, 'template.html', {'profilePicForm': profilePicForm})
使用print(profilePicForm.errors)时,我得到的是-
- profile\u pic
- 这个字段是必需的。
enctype=“多部分/表单数据”
检查更新。是的,它成功了。从我这方面来说,这是一个非常愚蠢的错误。非常感谢。这并没有为您的问题提供任何直接的解决方案,只是为了让您知道Django中有一个可以使用的ImageField
!检查
class ProfilePicForm(forms.Form):
profile_pic = forms.FileField()
<form action="{% url 'newsfeed:uploadProfilePic' %}" method="post">
{% csrf_token %}
{{ profilePicForm.as_p }}
<button type="submit">Upload</button>
</form>
if profilePicForm.is_valid():
return HttpResponse("<h1>Valid</h1>")
profilePic = ProfilePictures()
query = UserInfo.objects.filter(id=id)
for user in query:
profilePic.user = user
break
profilePic.profile_pic = profilePicForm.cleaned_data['profile_pic']
profilePic.save()
return redirect('newsfeed:profile')
else:
return render(request, 'template.html', {'profilePicForm': profilePicForm})
<form action="{% url 'newsfeed:uploadProfilePic' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ profilePicForm.as_p }}
<button type="submit">Upload</button>
</form>