Should be:

Field.Virtual('age', lambda row: diff_in_years(row.personal_data.dob))

Virtual field functions must reference the table name as well as the field 
name.

Anthony

On Tuesday, February 18, 2014 5:28:26 PM UTC-5, Leandro E. Colombo Viña 
wrote:
>
> Hi Guys!
>
> I've got a little problem trying to use Virtual Fields. I can't make them 
> work. I follow the example in the book and nothing, I don't have a clue of 
> what I'm doing wrong...
> The idea is to have a virtual field that calculates the age of the person 
> based on his day of birth...
>
> Here is the model:
> db.define_table('personal_data',
>                 ....., # another fields
>                 Field('dob', 'date', requires=IS_DATE()),
>                 ....., # more fields
>                 auth.signature
> )
> db.personal_data.age = Field.Virtual('age', lambda row: 
> diff_in_years(row.dob))
>
> Where the auxiliary function is:
> from dateutil import relativedelta as rdelta
> def diff_in_years(date):
>     try:
>         return rdelta.relativedelta(datetime.datetime.today().date(), 
> date).years
>     except:
>         return None
>
> And here is my test controller:
> def prueba():
>     response.flash = db.personal_data(uid=auth.user.id).age
>
> The traceback says that "Row" doesn't have the attribute "age".
>
> I've also tried with a method (Field.Method), with no luck. I always have 
> the same error....
>
> Any help would be appreciated!
> LEO
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to