Richard First off, thanks for all the help, I certainly appreciate it.
I'm trying to work with the second suggestion below, but am having trouble as you suspected with getting the row.id.
I'm shying away from the auth_group idea because I prefer to enforce within the db that the users on that ticket can only be a predefined subset of users. I think that is more of a personal preference, but for now I'm going to continue going down the other path.
Any other pointers are appreciated. I'll continue digging in to this for the afternoon.
-Jim
On 5/8/2012 8:22 AM, Richard Vézina wrote:
Ok, I think I understand... You create a kind of materialized view with helpdeskTech???If you only need a "subset" of auth_user, you can create a auth_group for this. I mean, you create a auth_group "tech" and you assign user to this group then you will be able to make a set of those users like this :tech_set = db((db.auth_group.role=='tech') & (db.auth_user.id <http://db.auth_user.id>==db.auth_membership.user_id) & (db.auth_membership.group_id==db.auth_group.id <http://db.auth_group.id>))Then use this set in ticket requires directly instead of passing by the helpdeskTech.requires=IS_IN_DB(tech_set,'auth_user.id <http://auth_user.id>','%(first_name)s %(last_name)s',\cache=(cache.ram, 3600)),There is other solution with you helpdeskTech, but I am not sure it works :requires=IS_IN_DB(db,'helpdeskTech.id',db.auth_user(db.helpdeskTech(row.id <http://row.id>).id).first_name + db.auth_user(db.helpdeskTech(row.id <http://row.id>).id).last_name,\cache=(cache.ram, 3600)),This work in represent : db.auth_user(db.helpdeskTech(row.id <http://row.id>).id).first_name + db.auth_user(db.helpdeskTech(row.id <http://row.id>).id).last_nameBecause represent is a lambda and you pass row, but in case of requires I think that you can't get the ID of the not yet created record, that I why I use group assignment and set and don't create kind of materialized view like you...I think you can do both, have a materialized view if you need it for some purpose and have a group assigment and set approach at the same time.Hope I am more clear. RichardOn Mon, May 7, 2012 at 5:37 PM, Richard Vézina <[email protected] <mailto:[email protected]>> wrote:Sorry for the lazy example, I have to go, I can try to write the proper code if you didn't solve it tomorrow, just ask. Richard On Mon, May 7, 2012 at 5:36 PM, Richard Vézina <[email protected] <mailto:[email protected]>> wrote: Ok, now I understand... You should allways use id instead of name or other field. Anyway I think you can figure it out from this example : dog name person_id person name stat_about_dog_and_person stat1 stat2 dog_name person_name If I want to get dog_name or person_name in stat_about_dog_and_person.dog_name I could something like this : db.dog(ID).name You just have to replace the ID by the id or a query that return the id... You can even do : db.dog(db.auth_user(db.ham(ID).id)).id).name Richard On Mon, May 7, 2012 at 5:09 PM, Jim Steil <[email protected] <mailto:[email protected]>> wrote: Sorry, not sure I follow. In my example, helpdeskTech is a subset of auth_user. My 'ticket' has a helpdeskTechId (in the assignedTo field), not an id from the auth_user table. I want my select tag to display the auth_user name, but return the helpdeskTechId from the helpdeskTech table. Maybe I don't fully grok the IS_IN_DB and the way the parms work. I'll go back and look that over again. -Jim On 5/7/2012 3:59 PM, Richard Vézina wrote:auth_user_rows = db().select(db.auth_user.id <http://db.auth_user.id>) make a set : auth_user_set = ((db.auth_user.id <http://db.auth_user.id> == rows.first().id)|(db.auth_user.id <http://db.auth_user.id> == rows.last().id)) IS_IN_DB(auth_user_set,...) Richard On Mon, May 7, 2012 at 4:37 PM, Jim Steil <[email protected] <mailto:[email protected]>> wrote: Hi I am having trouble getting my list to display the way I want it to. Given the following definition: ----------------------- helpdeskTech = db.define_table('helpdeskTech', Field('helpdeskTechId', 'id', readable=False), Field('helpdeskId', db.helpdesk, required=True, label='Helpdesk'), Field('userId', db.auth_user, required=True, label='User'), format='%(userId.lastFirst)s') helpdeskTech.helpdeskId.requires = IS_IN_DB(db, db.helpdesk, '%(name)s',zero='...choose...')helpdeskTech.userId.requires = IS_IN_DB(db, db.auth_user, '%(lastFirst)s',zero='...choose...')helpdeskTech['_plural'] = 'Technicians' ticket = db.define_table('ticket', Field('ticketId', 'id', readable=False), Field('helpdeskId', db.helpdesk, required=True, label='Helpdesk'), Field('name', length=100, required=True), Field('description', 'text'), Field('createdOn', 'date', label='Created'), Field('createdBy', db.auth_user, required=True, label='Creator'), Field('assignedTo', db.helpdeskTech, label='Assigned To'), Field('priority', length=10, required=True), Field('status', length=10, required=True), format='%(name)s') ticket.helpdeskId.requires = IS_IN_DB(db, db.helpdesk, '%(name)s',zero='...choose...')ticket.name.requires = IS_NOT_EMPTY() ticket.createdOn.requires = IS_DATE('%m/%d/%Y') ticket.createdBy.requires = IS_IN_DB(db, db.auth_user, '%(lastFirst)s', zero='...choose...') ticket.assignedTo.requires = IS_NULL_OR(IS_IN_DB(db, db.helpdeskTech,zero='...choose...'))----------------------- I want my IS_IN_DB validator in the last line to display the last name and first name from the auth_user table. But, what I'm getting is the helpdeskTechId field displaying. I'm wondering how I can refer back to the auth_user table to get the names to display in the dropdown instead of the helpdeskTechId without custom-coding the view. Thoughts? -Jim

