FLASK-WTF创建一个可留空的Floatfield



我想在wtform中创建一个floatfield来编辑数据库中的值,如果我们不想改变该属性的值,可以将其保留为空。但是当我保持字段为空并提交表单时,它会给出验证错误消息,"Not a valid float value.">

这是我使用的代码

def Inrange(form, field):
    if form.movie_rating.data:
        if 0 > int(form.movie_rating.data) < 10: 
            raise ValidationError('Rating should be from 0 to 10')

class EditForm(FlaskForm):
    movie_rating = FloatField('Your Rating out of 10', validators=[Inrange])
    review = StringField('Review')
    # movie_id = HiddenField('id')
    submit = SubmitField('Done')

我可以让Stringfield空没有任何问题,但不是Floatfield。

是否有任何方法来解决这个问题,而仍然使用Floatfield?如果没有,还有其他选择吗?

您可以使用wtforms提供的验证器来验证输入。

  • Optional允许空字段并在这种情况下停止验证。
    字段返回值为None

  • NumberRange保证输入在规定范围内。

from wtforms.validators import (
    NumberRange, 
    Optional
)
class EditForm(FlaskForm):
    movie_rating = FloatField(
        'Your rating out of 10', 
        validators=[
            Optional(), 
            NumberRange(0, 10, 'Rating should be from 0 to 10')
        ]
    )

最新更新