After the http://www.thadeusb.com/weblog/2009/12/31/web2py_virtualfields_as_an_orm_an_sqlalchemy_approach
webpage I made something like: --- cut --- db.define_table( 'web_sites', Field( 'web_id', db.web, label = T( 'Web config' ), requires = IS_IN_DB( db, 'web.id', '%(name)s' ) ), Field( 'name', 'string', label = T( 'Name' ), requires = [IS_NOT_EMPTY()] ), Field( 'txt', 'text', label = T( 'Config file' ), requires = [IS_NOT_EMPTY()] ), Field( 'weight', 'integer', label = T( 'Weight' ), requires = [IS_NOT_EMPTY()] ), Field( 'active', 'boolean', label = T( 'Active' ), default = True, ), Field( 'modified', 'boolean', label = T( 'Modified' ), default = True, writable = False, readable = False, ), ) # computing ServerNames and ServerAliases ########################################## class web_sites_extra(): def servername( self ): def lzy( ): x = 'sfjha' return x return lzy db.web_sites.virtualfields.append( web_sites_extra() ) --- cut --- In the view: --- cut --- {{=selected_rows[0].servername()}} But I got: File "gluon/sql.py", line 665, in __getattr__ return dict.__getitem__(self,key) KeyError: 'servername' If I only change: class web_sites_extra(): def servername( self ): def lzy( ): x = 'sfjha' return x return lzy to: class web_sites_extra(): def lzy( self ): x = 'sfjha' return x def servername( self ): return self.lzy it works.