2009-10-18 33 views
2

我有一個表構件包括SQLField("year", db.All_years)的web2py - 需要選擇下拉值驗證從分貝

和All_years表如下所示:

db.define_table("All_years", 
    SQLField("fromY","integer"), 
    SQLField("toY","integer") 
) 

和約束是:

db.member.year.requires = IS_IN_DB(db, 'All_years.id','All_years.fromY') 

的問題是,當我從下拉列表中選擇一年時,年份列的值是年份的id,而不是年份值。例如:如果2009年有db id = 1,那麼db在db = 1時的值不等於l 2009.

我不明白爲什麼。

回答

2

我看到你的項目進展順利!

驗證器是IS_IN_DB(dbset, field, label)。所以,你應該嘗試:

db.member.year.requires = IS_IN_DB(db, 'All_years.id', '%(fromY)d') 

有在下拉列表中選擇一個正確的標籤。

現在,從表中,它看起來像你寧願選擇一個區間,而不是僅僅是開始的一年,在這種情況下,你可以使用這個:

db.member.year.requires = IS_IN_DB(db, 'All_years.id', '%(fromY)d to %(toY)d') 

將顯示,例如,「1980年至1985年「, 等等。

+0

年份值正確顯示爲下拉列表,但不正確的場景是,它保存了所選年份的編號而不是年份編號(e,x:2009) – Neveen 2009-10-18 14:01:34

+0

您的意思是在您的字段'year'?這很正常,你把你的字段定義爲'db.All_years',它是對另一個表的引用,因此是id。這應該不是問題,要顯示它,例如,您可以使用'rows = db(db.mytable.year == db.All_years.id).select(db.All_years.fromY,db.All_years.toY ,. ..)'。 – RedGlyph 2009-10-18 14:08:08

+0

是的,你沒事,謝謝 – Neveen 2009-10-18 14:14:07