2011-05-03 45 views
2

如何根據另一個字段的存在條件驗證字段。例如,只有在「國家」是「美國」時才需要「國家」。formencode有條件驗證

感謝, 史蒂夫

編輯:

所以我想這樣做:

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

但錯誤信息與代替 「國家」 「_the_form」 相關聯。有沒有辦法將它鏈接到該字段?

+0

我們可以得到一個代碼示例,所以我們有更多的上下文嗎? – MikeVaughan 2011-05-03 22:38:04

+0

我只使用默認驗證器,在我的情況下「NotEmpty」。所以在我的例子中,我有兩個表單域,State和Country,當Country是US時,我只希望State不爲空。否則,國家可能是空的。 – steve 2011-05-04 19:28:19

回答

0

在我公司的一個項目中發生同樣的問題。我們爲此編寫了我們自己的Formencode驗證器。我們目前試圖將它與主項目合併。在此期間,你可以在這裏下載:https://github.com/GevatterGaul/formencode

還存在,還有一份HOWTO,德國:http://techblog.auf-nach-mallorca.info/2014/08/19/dynamische_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僅在給定字段與給定值相匹配時才需要字段。在你的例子中,只有'國家'是'美國',那麼它需要'國家'字段。

希望我能幫上忙。

+0

那裏有更好的驗證庫。即時通訊使用這個工作原因,但有一個像'not_empty'這樣的選項已經是我書中紅旗的開始。 – dtc 2017-10-05 18:27:16