如何使用HiddenField来强制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执行数字验证?

推荐的技巧是使用IntegerField并将小部件更改为HiddenInput

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

也可以创建

的子类
class HiddenInteger(IntegerField):
    widget = HiddenInput()

您可以使用自定义验证器

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。

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

相关内容

最新更新