Python 如何使用HiddenField强制WTForms中的整数数据?

Python 如何使用HiddenField强制WTForms中的整数数据?,python,wtforms,flask-wtforms,Python,Wtforms,Flask Wtforms,我有一个WTForm类,如下所示: class MyForm(Form): field1 = HiddenField(default=0, validators=NumberRange(min=0, max=20)]) 将此标记视为由WTForms <input type='hidden' name='field1' value='5'></input> 这未通过NumberRange验证。这是因为HiddenFields小部件类将value属性强制为字符

我有一个
WTForm
类,如下所示:

class MyForm(Form):
    field1 = HiddenField(default=0, validators=NumberRange(min=0, max=20)])
将此标记视为由
WTForms

<input type='hidden' name='field1' value='5'></input>


这未通过
NumberRange
验证。这是因为
HiddenField
s小部件类将
value
属性强制为字符串。如何获取
WTForms
来生成此标记,以便我可以对后续的
POST
执行数字验证?

您可以使用自定义验证程序

或者为字段1声明方法clean

def clean_field1(self):
    value = self.cleaned_data['field1']
    try:
       ...
    except:
       raise ValidationError(...)
    return value

推荐的技巧是使用
整型字段
,并将小部件更改为
HiddenInput

class MyForm(Form):
    field1 = IntegerField(widget=HiddenInput())
您还可以创建子类

class HiddenInteger(IntegerField):
    widget = HiddenInput()

我想这只适用于Django?我在Flask应用程序的上下文中使用它。Django表单和WTForms不是一回事。这并不能回答这个问题。问题是在Flask的上下文中询问WTForms,而不是Django,Django是一个完全不同的框架。这是一个好主意,但它在
wtf.quick\u form
中不起作用。它显示字段名。只有HiddenField的实例才是真正隐藏的。没有试过,只是看了看来源。
class HiddenInteger(IntegerField):
    widget = HiddenInput()