Django:form.is_valid 检查后,cleaned_data 缺少图像字段

Posted

技术标签:

【中文标题】Django:form.is_valid 检查后,cleaned_data 缺少图像字段【英文标题】:Django: after form.is_valid check, cleaned_data is missing the image field 【发布时间】:2011-05-18 19:52:11 【问题描述】:

我有一个表单,有一堆字段,然后我有一个:

    profile_image=forms.ImageField(required=False)

form.is_valid() 检查后的问题是,

form.cleaned_data.get('first_name')

例如,确实返回实际名称,但是,

form.cleaned_data.get('profile_image')

不返回任何东西。

在 print(request.POST) 输出中,我得到了

u'profile_image': [u'02 Portfolio Page.jpg']

但在 print(form.cleaned_data) 我得到:

 'profile_image': None

为什么文件在 is_valid 检查时丢失了?我该怎么办?

更新:

class NewChickForm(forms.Form):
first_name = forms.CharField()
last_name = forms.CharField()
profile_image=forms.ImageField(required=False)
def do_save(self):
    u = Subject(
        first_name = self.cleaned_data.get('first_name'),
        last_name = self.cleaned_data.get('last_name'),
        profile_image = self.cleaned_data.get('profile_image'),
    )
    print(self.cleaned_data)
    u.save()
    return u

s = Subject()
form = NewChickForm(request.POST) # 1)do i add here `request.FILES` ?
if form.is_valid():
    s = form.do_save()
            # 2) s.profile_image = form.cleaned_data.get('profile_image')?

即使我做了 #1) 和 #2),我仍然没有得到 NONE

【问题讨论】:

【参考方案1】:

确保您在 html 表单中使用了正确的 enctype

<form enctype="multipart/form-data" method="post" action="/foo/">

另外,请确保在构造表单对象时绑定request.FILES

# Bound form with an image field, data from the request
>>> f = ContactFormWithMugshot(request.POST, request.FILES)

Binding uploaded files to a form

编辑: File Uploads

【讨论】:

你是对的。我没有多部分。添加。但我并没有得到太多的约束力。 django 的解释似乎与我在代码中所做的完全不同。您能否根据我粘贴在 UPDATE 中的新代码来说明我应该如何做?那真是太棒了 多部分数据将被放入request.FILES,因此您需要将其绑定到#1 中的表单以供is_valid 验证该字段。我不确定#2,因为我总是直接从request.FILES 中提取文件,而不是使用cleaned_data.get(...) 您检查过request.FILES 以查看您的数据是否存在? 这里,这个文档可能是一个更好的解释:docs.djangoproject.com/en/dev/topics/http/file-uploads/…

以上是关于Django:form.is_valid 检查后,cleaned_data 缺少图像字段的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单不运行 form.is_valid

当值为空时,Django modelSerializer form.is_valid() 为真

Django 消费者(Django 频道)中的表单数据验证(相当于 form.is_valid)

Django form.is_valid() 总是假的

Django form.is_valid() 失败的基于类的视图 - Form、SingleObject、DetailMixins

django - 如何在验证之前处理/清理字段