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â
相关产品推荐
相关产品推荐

