Python 在验证中不允许空白时,QuerySelectField中是否可以没有默认值?

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

我正在使用类似以下代码使用WTForms生成一个字段:

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.")