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 

Reply via email to