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

如何为Flask表单的两个字段添加额外自定义验证器,要求二者至少一个非空

WTForms 双字段至少一个非空自定义验证器实现

完全兼容你参考的自定义验证器类实现风格,具体代码和用法如下:

1. 自定义验证器类

from wtforms import ValidationError

class AtLeastOneRequired:
    def __init__(self, peer_field, message=None):
        # 传入要校验的另一个字段的字段名
        self.peer_field = peer_field
        self.message = message or f"当前字段与{peer_field}至少需要填写一个"
    
    def __call__(self, form, field):
        # 获取配对字段的实例
        peer = form[self.peer_field]
        # 两个字段都为空时抛出验证错误
        if not field.data and not peer.data:
            raise ValidationError(self.message)

2. 表单中使用示例

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField

class MyForm(FlaskForm):
    # 给其中一个字段绑定验证器,传入配对的字段名即可
    phone = StringField('手机号', validators=[AtLeastOneRequired('email')])
    email = StringField('邮箱')
    submit = SubmitField('提交')

补充说明

  • 若需要自定义报错内容,初始化验证器时传入message参数即可,示例:AtLeastOneRequired('email', message='手机号和邮箱不能同时为空')
  • 若需要两个字段都展示报错提示,可分别给两个字段都添加验证器,互相指向对方字段:email = StringField('邮箱', validators=[AtLeastOneRequired('phone')])
  • 验证逻辑会随表单默认校验流程自动触发,无需额外编写调用代码

内容的提问来源于stack exchange,提问作者Thatguyfromthething

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:36:03