I think the format argument only alters the record representation in forms and SQLTABLE (which is used when a set or records is serialized in a view). If you're just doing a query and pulling an individual field value from a row, I don't think the format will be applied. See http://web2py.com/book/default/chapter/06#Record-Representation.
If you don't want to call the format function every time you display the speaker name, maybe you could use a virtual field: http://web2py.com/book/default/chapter/06#Virtual-Fields Anthony On Thursday, March 31, 2011 4:41:40 PM UTC-4, Gregory Hellings wrote: > I have defined a custom auth.settings.table_user_name implementation > that includes one extra field and specifies a value for the format > argument. In this case format is a callback function which displays > the user's name with extra formatting based on membership in certain > auth groups. This option works wonderfully with SQLFORM fields and > with appadmin displays of the auth_membership table, but I seem to be > missing something about its functionality elsewhere. > > (This is in the context of a demo chat application utilizing the > web2py_comet functionality). I have another table which is defined > like this: > > db.define_table('chat', > Field('speaker', db.auth_user, default=auth.user_id, > writable=False, readable=False), > Field('statement', 'text', requires=IS_NOT_EMPTY()), > Field('deleted', db.auth_user, writable=False, readable=False)) > db.chat.speaker.requires = IS_IN_DB(db, db.auth_user.id) > db.chat.deleted.requires = IS_IN_DB(db, db,auth_user.id) > > My controller for displaying the lines uses this logic > > rawlines=db(db.chat.deleted==None).select(limitby=(0,10),orderby=~ > db.chat.id) > lines=[] > for line in rawlines: > lines.append(DIV(line.speaker, B("> "), line.statement, > _id=line.id)) > > However, when I do that, I get the user's ID instead of the user's > name as formatted by my format callback method. Thus the chat output > looks like > > 1> Hi there > 1> How is everyone doing? > 2> We're great, how about you? > 1> Oh, I'm absolutely fantastic. > > In order to get the properly formatted user's name, I have to > explicitly call my format method, making the last line of the above > controller instead read > > lines.append(DIV(name_format(line.speaker), B("> "), > line.statement, _id=line.id)) > > This defeats most of the purpose I had in using the automatic > format=name_format argument to the define_table call. Am I missing > something here? What am I doing incorrectly? As I scale out of my > demo chatroom, I want to make sure user names are consistently > displayed throughout my application by means of the format argument to > the auth_user table, rather than trying to remember to call > name_format(user) everywhere. Any advice? > > --Greg

