условная проверка formencode - PullRequest
2 голосов
/ 04 мая 2011

как проверить поле условно на основании наличия другого поля. например, сделать «штат» обязательным, только если «страна» - «США».

спасибо, стив

EDIT:

так что я решил сделать это:

chained_validators = [validators.RequireIfPresent('state', present="country")]

но сообщение об ошибке связано с "_the_form" вместо "state". есть ли способ связать его с полем вместо этого?

1 Ответ

0 голосов
/ 19 августа 2014

Была такая же проблема во время проекта в моей компании. Мы написали наш собственный валидатор Formencode для этого. В настоящее время мы пытаемся объединить его с основным проектом. А пока можете скачать его здесь: https://github.com/GevatterGaul/formencode

Существует также Howto на немецком языке: http://techblog.auf -nach-mallorca.info / 2014/08/19 / dynamicische_formulare_validieren_mit_formencode /

Но позвольте мне дать вам краткое изложение в контексте вашего примера:

from formencode import validators
v = validators.RequireIfMatching('country', expected_value='US', required_fields=['state'])
v.to_python(dict(country='US', state='Virginia'))

Основным преимуществом является то, что по сравнению с validators.RequireIfPresent, validators.RequireIfMatching требует поля только тогда, когда данное поле соответствует заданному значению. В вашем примере, только если «страна» - это «США», тогда требуется поле «штат».

Надеюсь, я смогу помочь.

...