我有一个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
上执行数字验证?
答案 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