我有一个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