I think it is a bug. Please open a ticket.
On May 25, 9:23 pm, Jim Karsten <[email protected]> wrote: > I am getting an exception raised when I combine virtual fields and aliases. > Here is an example that produces the error. The example may not have > practical use. It is used for illustration only. > > # In models/db.py > db.define_table('person', > Field('first_name'), > Field('last_name')) > db.define_table('couple', > Field('husband_id', > requires=IS_IN_DB(db, 'person.id', '%(first_name)s')), > Field('wife_id', > requires=IS_IN_DB(db, 'person.id', '%(first_name)s') > )) > > class PersonVirtFields(object): > def name(self): > return "%s %s" % (self.person.first_name, self.person.last_name) > > db.person.virtualfields.append(PersonVirtFields()) > > # In controller > def index(): > husband = db.person.with_alias('husband') > rows = db(db.couple.id>0).select( husband.first_name, > left=husband.on(husband.id==db.couple.husband_id)) > return dict(rows=rows) > > The exception is: > AttributeError: 'PersonVirtFields' object has no attribute 'person' > > I can avoid the exception if I change the line in the PersonVirtFields name > method to: > return "%s %s" % (self.husband.first_name, self.husband.last_name) > > The virtual class appears to be receiving the table name as per its alias. > Is this a bug or is that expected behaviour? > > Regards, > Jim Karsten

