2009-10-18 6 views
2

i ai un élément de table qui comprend SQLField("year", db.All_years)web2py - nécessitent une sélection des valeurs déroulantes valider de db

et une table All_years comme suit:

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

et contraintes sont les suivants:

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

Le Le problème est quand je sélectionne une année à partir de la liste déroulante la colonne de la valeur de l'année est l'ID de l'année, pas la valeur de l'année par exemple: si l'année 2009 a db id = 1 la valeur de l'année en db égale = 1 non équa l 2009.

Je ne comprends pas pourquoi.

Répondre

2

Je vois que votre projet progresse bien!

Le validateur est IS_IN_DB(dbset, field, label). Donc, vous devriez essayer:

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

d'avoir une étiquette correcte dans votre liste déroulante.

maintenant de votre table il semble que vous préférez choisir un intervalle plutôt que l'année commençant, dans ce cas, vous pouvez utiliser ceci:

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

qui affiche, par exemple, « 1980-1985 ", etc.

+0

Les valeurs des années sont affichées correctement dans la liste déroulante mais le scénario incorrect est, il a enregistré l'identifiant de l'année sélectionnée pas le numéro de l'année (e, x: 2009) – Neveen

+0

Vous voulez dire dans votre domaine «année»? C'est normal, vous définissez votre champ comme 'db.All_years' qui est une référence à une autre table, donc l'identifiant. Cela ne devrait pas poser de problème, pour l'afficher par exemple, vous pouvez utiliser 'rows = db (db.mytable.year == db.All_years.id) .select (db.All_years.fromY, db.All_years.toY,. ..) '. – RedGlyph

+0

oui, vous allez bien merci – Neveen

Questions connexes