You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用django-formset处理文件上传的错误提示与验证问题求助

django-formset处理文件上传的错误提示与验证问题求助

大家好,我现在在用django-formset做一个带文件上传的联系表单,遇到了两个关于文件验证和错误提示的问题,实在搞不定了,来求助一下!

先说明我的技术环境:目前用的是Django 5.2.4、Django CMS 4.1.4,还有django-formset 2.0.1。我的表单代码很简单,就是一个普通的Form类:

class ContactForm(forms.Form):
    name = fields.CharField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    email_address = fields.EmailField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    subject = fields.CharField(widget=widgets.TextInput(attrs={"placeholder": ""}))
    message = fields.CharField(widget=widgets.Textarea(attrs={"placeholder": "","rows":"5"}))
    uploaded_file = FileField(
        label="Image (optional)",
        widget=UploadedFileInput(attrs={
            'accept': 'image/jpeg,image/png,image/gif',
            'max-size': MAX_UPLOAD_SIZE,
        }),
        help_text="JPEG, PNG, or GIF. Max file size 5 MB. We accept other formats after initial contact.",
        required=False,
    )

问题一:选择无效文件时没有正确显示错误提示

我本来想自定义验证文件上传(先做图片验证,之后还要支持其他类型),但首先遇到的问题是,选了无效文件后完全看不到对应的错误提示:

  • 当选择超过大小限制的文件时,页面完全没反应:既不显示“文件太大”这类提示,也不发送POST请求,UI也没有任何更新
  • 当选择扩展名不符合要求的文件时,虽然会发送POST请求,UI也会显示选中的文件(还可能生成缩略图),但就是不显示“不允许该文件类型”的错误提示

我了解到文件选择时好像不会处理JSON响应,那有没有其他方式能显示这些错误提示?比如能不能用<meta name="error-messages" type_mismatch="File upload still in progress." pattern_mismatch="This is not a valid file." bad_input="File upload failed.">这个标签来配置?

问题二:提交无效文件时出现错误的矛盾提示

还有个相关问题:当提交带无效文件(比如扩展名不对)的表单时,我总是收到这样的错误:

{"uploaded_file": [{"message": "Please either submit a file or check the clear checkbox, not both.", "code": "contradiction"}]}

看起来是因为文件验证不通过后,这个字段会被清空,从form.cleaned_data里消失,导致触发了这个矛盾错误。我本来想显示“扩展名不正确”这类更有用的提示,但现在文件数据都没了,根本没法做自定义验证。

我主要想找相关的文档,看看这类情况应该怎么处理,总觉得是不是自己漏看了什么配置?有没有大佬能指点一下?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:33:04