Python 在验证中不允许空白时,QuerySelectField中是否可以没有默认值?
我正在使用类似以下代码使用WTForms生成一个字段:Python 在验证中不允许空白时,QuerySelectField中是否可以没有默认值?,python,wtforms,flask-wtforms,Python,Wtforms,Flask Wtforms,我正在使用类似以下代码使用WTForms生成一个字段: my_field = QuerySelectField( 'My Field', query_factory=lambda: MyClass.query ) 但是在本例中,我得到了类型为MyClass的所有元素,第一个元素被自动选择 如果我以这种方式更改它: my_field = QuerySelectField( 'My Field', query_factory=lambda: MyClass.quer
my_field = QuerySelectField(
'My Field',
query_factory=lambda: MyClass.query
)
但是在本例中,我得到了类型为MyClass
的所有元素,第一个元素被自动选择
如果我以这种方式更改它:
my_field = QuerySelectField(
'My Field',
query_factory=lambda: MyClass.query,
allow_blank = True
)
默认选择现在是空的,这是我想要的,但空选择现在是有效的,而我希望它是一个错误
有没有一种方法可以不设置默认值,但仍然不能使选择成为可选的?向表单中添加该字段的
DataRequired
验证似乎是最简单的方法
from wtforms import validators
my_field = QuerySelectField(
'My Field',
query_factory=lambda: MyClass.query,
allow_blank=True,
validators=[validators.DataRequired()]
)
您可以创建自定义验证器,以使由
allow\u blank=True
创建的默认选择无效
使用InputRequired()
或DataRequired()
将不起作用,因为默认的“空白”选择值为\u None
,因此允许通过my\u字段的验证
from wtforms.validators import ValidationError
class Form(FlaskForm):
my_field = QuerySelectField(
'My Field',
query_factory=lambda: MyClass.query,
allow_blank = True
)
@staticmethod
def validate_my_field(self, field):
if field.data is None:
raise ValidationError("Please select a value.")