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

时间:2014-05-21 09:04:54

标签: 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验证。这是因为HiddenField窗口小部件类将value属性强制转换为字符串。如何让WTForms生成此标记,以便我可以在后续POST上执行数字验证?

2 个答案:

答案 0 :(得分:13)

建议的诀窍是使用IntegerField并将小部件更改为HiddenInput

class MyForm(Form):
    field1 = IntegerField(widget=HiddenInput())

你也可以继承

class HiddenInteger(IntegerField):
    widget = HiddenInput()

答案 1 :(得分:-5)

您可以使用自定义验证器

https://docs.djangoproject.com/en/dev/ref/validators/

from django.core.exceptions import ValidationError

def validate_max(value, **kwargs):   
    min = kwargs.get('min', 0)
    max = kwargs.get('max', 10)
    if str(value).isnum() and int(value) > max:
        raise ValidationError('%s is not in the range [%s..%s]' % (value, min, max))

或声明方法clean for field1

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