如何在WTForms中使用HiddenField强制整数数据?
我有一个叫做 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 个回答
-6
你可以使用自定义的验证器。
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))
或者为字段 field1 声明一个叫做 clean 的方法。
def clean_field1(self):
value = self.cleaned_data['field1']
try:
...
except:
raise ValidationError(...)
return value
19
推荐的做法是使用一个 IntegerField
,然后把它的显示方式改成 HiddenInput
,也就是隐藏输入框。
class MyForm(Form):
field1 = IntegerField(widget=HiddenInput())
你还可以通过继承来创建自己的类。
class HiddenInteger(IntegerField):
widget = HiddenInput()