Как я могу использовать 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 Проверка. Это потому что HiddenFieldS класс виджетов принуждает 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
Другие вопросы по тегам