使用文件字段在Django中上传表单时无效的文件

时间:2018-05-30 06:35:12

标签: python django

我是新的Django,正在创建一个社交网络网站来获取它。我已经制作了一个用于上传个人资料图片的表单并在我的模板中成功呈现,但是当我上传它时,我收到一个名为 profile_pic 的错误。请帮帮我。

  

views.py - 这是我正在进行的处理。我在这里得到一个无效的表格错误,返回HttpResponse(profilePicForm.errors)作为回复返回 profile_pic

if request.method == "POST":
        profilePicForm = ProfilePicForm(request.POST, request.FILES)
        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 HttpResponse(profilePicForm.errors)
  

forms.py - 表单类

class ProfilePicForm(forms.Form):
    profile_pic = forms.FileField()
  

profile.html - 这就是我渲染它的方式。

<form action="{% url 'newsfeed:uploadProfilePic' %}" method="post">
        {% csrf_token %}
        {{ profilePicForm.as_p }}
        <button type="submit">Upload</button>
    </form>

1 个答案:

答案 0 :(得分:2)

如果表单无效,则通常会渲染相同的模板,以查看网页上的错误消息,因此您应该执行以下操作,而不是return 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})

同样,对于文件上传,您应该添加到表单enctype="multipart/form-data"

<form action="{% url 'newsfeed:uploadProfilePic' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ profilePicForm.as_p }}
    <button type="submit">Upload</button>
</form>