Как я могу использовать 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
S класс виджетов принуждает value
атрибут в строку. Как я могу получить WTForms
создать эту разметку так, чтобы я мог выполнить числовую проверку на последующем POST
?
2 ответа
Решение
Рекомендуемый трюк заключается в использовании 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))
или объявить метод чистым для field1
def clean_field1(self):
value = self.cleaned_data['field1']
try:
...
except:
raise ValidationError(...)
return value