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

Wagtail自定义文档上传表单文件大小验证失效求助

解决Wagtail自定义文档上传表单大小验证不触发的问题

问题原因及修复步骤

1. 调整Nginx配置避免提前拦截请求

如果Nginx的client_max_body_size设置小于你定义的5MB,超大文件会被Nginx直接拒绝,根本到不了Wagtail的表单验证环节。

  • 修改Nginx配置,将client_max_body_size设为大于等于5MB,例如:
    client_max_body_size 6M;
    
  • 重启Nginx生效:sudo systemctl restart nginx

2. 改用字段专属验证方法替代全局clean()

你当前使用的全局clean()方法存在漏洞:Wagtail的BaseDocumentForm在执行全局clean前,可能因文件格式等问题将file字段从cleaned_data中移除,导致大小判断逻辑无法执行。改用clean_file()方法专门针对文件字段验证更可靠:

修改bangtsam.forms.document_base.py:

from django.conf import settings
from django.forms import ValidationError
from wagtail.documents.forms import BaseDocumentForm


class CustomDocumentForm(BaseDocumentForm):

    def clean_file(self):
        file = self.cleaned_data.get('file')
        if file:
            if file.size > settings.MY_DOCS_MAX_UPLOAD_SIZE:
                max_size_mb = settings.MY_DOCS_MAX_UPLOAD_SIZE / (1024 * 1024)
                raise ValidationError(f"文件最大允许大小为 {max_size_mb}MB。")
        return file

3. 检查基础配置正确性

  • 确认bangtsam应用已添加到settings.py的INSTALLED_APPS中:
    INSTALLED_APPS = [
        # ... 其他应用
        'bangtsam',
    ]
    
  • 验证WAGTAILDOCS_DOCUMENT_FORM_BASE的路径完全正确,确保Python能找到该类。

4. 排除其他验证干扰

测试时使用仅大小超5MB、格式符合Wagtail允许范围的文件,避免因格式错误触发其他ValidationError,掩盖大小验证提示。


内容的提问来源于stack exchange,提问作者Bân-lī Tshuâ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:12:33