首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用FileFields的ModelForms中限制文件上传的文件类型?

如何在使用FileFields的ModelForms中限制文件上传的文件类型?
EN

Stack Overflow用户
提问于 2011-06-24 05:30:57
回答 6查看 27.5K关注 0票数 26

我的目标是将Django ModelForm上的FileField限制为PDF和Word文档。我用谷歌搜索的答案都涉及创建一个单独的文件处理程序,但我不确定如何在ModelForm的上下文中做到这一点。settings.py中有没有可以用来限制上传文件类型的设置?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-24 05:59:55

我通过在ModelForm上使用clean_your_field方法来处理此问题。您可以在settings.py中设置一个可接受的文件扩展名列表,以便在您的clean方法中进行检查,但是settings.py中没有内置任何内容来限制上传类型。

例如,Django-Filebrowser采用了在settings.py中创建可接受的文件扩展名列表的方法。

希望这能帮到你。

票数 -1
EN

Stack Overflow用户

发布于 2012-01-12 05:24:44

创建验证方法,如下所示:

代码语言:javascript
复制
def validate_file_extension(value):
    if not value.name.endswith('.pdf'):
        raise ValidationError(u'Error message')

并将其包含在FileField验证器中,如下所示:

代码语言:javascript
复制
actual_file = models.FileField(upload_to='uploaded_files', validators=[validate_file_extension])

此外,您应该在setting.py上创建一个列表并遍历它,而不是手动设置您的模型允许哪些扩展。

编辑

要筛选多个文件:

代码语言:javascript
复制
def validate_file_extension(value):
  import os
  ext = os.path.splitext(value.name)[1]
  valid_extensions = ['.pdf','.doc','.docx']
  if not ext in valid_extensions:
    raise ValidationError(u'File not supported!')
票数 51
EN

Stack Overflow用户

发布于 2017-04-28 21:26:03

一种更简单的方法是在您的表单中这样做

代码语言:javascript
复制
file = forms.FileField(widget=forms.FileInput(attrs={'accept':'application/pdf'}))
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6460848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档