django - Django - 由于表单字段为空,表单返回无效
问题描述
在我的项目中,我有一个 Django 表单,它由一个ImageField和一个CharField组成。我将此表单传递给我的模板,并显示它。在表单上,我将方法属性设置为POST。在我看来,我处理这个请求,并返回一个重定向作为回报。
但是在我看来form.is_valid()
又回来了,我在控制台中打印了表单错误。False
这是从返回的错误form.errors
:
<ul class="errorlist"><li>image<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
它说我的ImageField输入字段是空的,但是我肯定在浏览器中为ImageField选择了一个文件,因此我不知道为什么它说输入字段是空白的。我的代码如下。
表格.py:
class CreatePost(forms.Form):
// The field that is not being assigned a file
image = forms.ImageField(allow_empty_file=False, required=True, widget=forms.FileInput(attrs={'id': 'image'}))
description = forms.CharField(max_length=100, required=False, widget=forms.TextInput(attrs={'placeholder': 'Add a caption:', 'id': 'description'}))
视图.py:
def create(request):
context = {}
if request.method == "POST":
form = CreatePost(request.POST)
if form.is_valid():
print("YES")
return redirect('home')
else:
print(form.errors)
context['error'] = 'Please enter valid form data'
else:
form = CreatePost()
context['form'] = form
return render(request, 'create.html', context)
模板:
<form action="{% url 'create' %}" method="POST">
{% csrf_token %}
{% for field in form %}
{{ field }}
<br>
{% endfor %}
<button class="createBtn btn btn-primary" type="submit">Post</button>
</form>
有人知道这里的问题吗?谢谢你。
解决方案
这里有两个问题:
您需要同时传递和
request.POST
到request.FILES
表单:form = CreatePost(request.POST, request.FILES)
为了让表单同时提交文件和字段,您需要将编码类型指定为
"multipart/form-data"
:<form action="{% url 'create' %}" method="POST" enctype="multipart/form-data">
推荐阅读
- safari - Upload to Google Cloud Storage using Signed URL returned origin not allowed on Safari only
- reactjs - React native changing img with state Error
- php - Laravel PHP unit with code coverage giving error PHPUnit\Framework\Exception: PHP Fatal error: Uncaught Error: Class 'Route' not found
- php - How to connect data of add user new field with content type new field?
- xamarin.forms - does Xamarin.Forms Style support variable/parameter from applied target?
- nginx - How add nginx-ingress custom health check behind a nginx reverse proxy
- ruby-on-rails - 无法更新数据库形式的数据
- python - Webscraping with Python and Selenium
- php - 我的 Apache2 RewriteEngine On 和 AllowOverride All 更改是否安全?
- azure - selection of task in release pipeline in azure devops