【问题标题】:Django form.is_valid returns false when a FileField is set to required当 FileField 设置为 required 时,Django form.is_valid 返回 false
【发布时间】:2020-12-02 10:35:40
【问题描述】:

所以我试图在 Django 中使用 FileField 创建一个表单。
我的 forms.py 看起来像这样:

from django import forms

class WordcloudForm(forms.Form):
    matrix = forms.FileField(required=True)
    min = forms.IntegerField(required=False)
    max = forms.IntegerField(required=False)
    # mask = forms.FileField(required=False)

我希望 FileField 成为必填字段。
视图.py:

def form(request):
    if request.method == 'POST':
        form = WordcloudForm(request.POST)
        print(form.is_valid)
        if form.is_valid():
            if 'matrix' in request.FILES:
                uploaded_matrix = request.FILES['matrix']
                print(uploaded_matrix.name, uploaded_matrix.size)
        min = form.cleaned_data['min']
        max = form.cleaned_data['max']
        print('min',min,'max',max)
        print(form.errors)

当forms.py中forms.FileField(required = True)时,form.is_valid()返回false:


forms.FileField(required=False) 在 forms.py 中时,form.is_valid() 返回 true:

当我使用forms.FileField(required = True) 提交表单时,我的print(form.errors) 状态:“此字段是必需的”,即使我确实添加了一个文件。

我尝试了不同的文件格式,以确保问题不仅仅出现在我用于测试的图像上。
我错过了什么?

【问题讨论】:

标签: python django forms


【解决方案1】:

正如documentation 中提到的,您需要在启动表单实例时传递request.FILESrequest.POST

if request.method == 'POST':
    form = WordCloudForm(request.POST, request.FILES)
    if form.is_valid():
        # rest of the code

另外,请将您的视图方法从 form 重命名为任何有意义的名称,因为您在该方法中有一个名为 form 的变量。与变量minmax 的命名相同,它们与python 的minmax 函数冲突。您的 IDE 已经在标记它们。

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2014-01-10
    • 2020-05-09
    • 2020-11-08
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多