我出于某种原因无法将文件存入我的ModelForm中的文件字段。文件已提交且文件名在相应的POST请求中,但form.is_valid()
失败,因为它指出{'the_file': [u'This field is required.']}
我为一个带有文件字段的模型和另一个模型的外键编写了一个ModelForm,因此:
class AccountFile(models.Model):
the_file = models.FileField(upload_to='{}/%Y/%m/%d/'.format(
settings.MEDIA_ROOT,
))
account = models.ForeignKey(
Account,
blank=True,
null=True,
related_name='account_files'
然后我生成了一个表单来上传文件,因此:
class UploadFileForm(forms.ModelForm):
class Meta:
model = models.AccountFile
fields = ['the_file' ]
def clean_file(self):
file = self.cleaned_data.get("the_file", False)
filetype = magic.from_buffer(file.read())
if not "pdf" in filetype:
raise forms.ValidationError("File is not pdf.")
return file
当我至少可以使用一件事时,进行一些非常基本的验证(将会延长!)。
表单的处理方式如下:
if request.method == 'POST':
form = forms.UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return redirect(
'account_url',
acc_manager_pk=acc_manager.pk,
account_pk=account.pk,
)
else:
form = forms.UploadFileForm()
这是关于Django 1.7
答案 0 :(得分:23)
确保您的表单设置了enctype
,例如:
<form method="post" enctype="multipart/form-data">
来自the docs:
请注意,如果请求方法为 POST , request.FILES 将仅包含数据,并且发布请求的
<form>
具有属性 enctype = “多部分/格式数据”即可。否则, request.FILES 将为空。