2009-10-18 52 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