我出于某种原因无法在我的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'
Run Code Online (Sandbox Code Playgroud)
然后我生成了一个表单来上传文件,因此:
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
Run Code Online (Sandbox Code Playgroud)
当我至少可以完成一件事时,进行一些非常基本的验证(将会扩展!).
表单处理如下:
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()
Run Code Online (Sandbox Code Playgroud)
这是在Django 1.7上
Ala*_*air 33
确保您的表单具有该enctype
集合,例如:
<form method="post" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)
来自文档:
请注意,如果请求方法是POST,则request.FILES将仅包含数据,并且发布请求的请求具有属性enctype ="multipart/form-data".否则,request.FILES将为空.
<form>