Существует Validator
, называемый EqualTo
, который можно использовать для сравнения равенства двух полей. Если вы хотите, чтобы feature_count
был таким же, как effective_rank
, вам просто нужно добавить:
feature_count = IntegerField('Number of features', validators=[DataRequired(), EqualTo('effective_rank'), NumberRange(min=1, max=50)])
Однако в вашем конкретном случае вы хотите обеспечить LessThan
, поэтому лучшее решение, которое у меня есть, - это скопировать и вставить код для класса EqualTo
, переименовать его для вашего конкретного случая, изменить сравнение и повторно использовать это как пользовательский класс:
class EqualTo(object): # --> Change to 'LessThan'
"""
Compares the values of two fields.
:param fieldname:
The name of the other field to compare to.
:param message:
Error message to raise in case of a validation error. Can be
interpolated with `%(other_label)s` and `%(other_name)s` to provide a
more helpful error.
"""
def __init__(self, fieldname, message=None):
self.fieldname = fieldname
self.message = message
def __call__(self, form, field):
try:
other = form[self.fieldname]
except KeyError:
raise ValidationError(field.gettext("Invalid field name '%s'.") % self.fieldname)
if field.data != other.data: # --> Change to >= from !=
d = {
'other_label': hasattr(other, 'label') and other.label.text or self.fieldname,
'other_name': self.fieldname
}
message = self.message
if message is None:
message = field.gettext('Field must be equal to %(other_name)s.')
raise ValidationError(message % d)
Тогда вы можете использовать:
feature_count = IntegerField('Number of features', validators=[DataRequired(), LessThan('effective_rank'), NumberRange(min=1, max=50)])