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

Reply via email to