Short answer:
if you cache the select, subqueries are missing. So you have to replace
email = row.emails.select().first()
with
email = db(db.emails.studio==row.id).select().first()
This is probably the only change of behavior and it is due to the need of
speedup. before cache was caching value but not the full object. We
achieved a 100x speedup by caching the final rows object. The problem is
that subselects, update_record and delete_record are methods of the rows
and they are not serializable, therefore they are missing when the rows are
cached.
Massimo
On Saturday, 8 September 2012 08:34:46 UTC-5, Jose wrote:
>
> Hi all
>
> In Version 2.0.0 (2012-06-04 18:49:33) dev works well
>
> Model:
>
> tb_studio = db.define_table('studio',
> Field('name', label=T('Name')),
> #...
> format='%(name)s',
> migrate=MIGRATE
> )
>
> tb_emails = db.define_table('emails',
> Field('studio', tb_studio, readable=False, writable=False, default=1),
> Field('email', label=T('Email')),
> migrate=MIGRATE
> )
>
> Controller
>
> def bg_studio():
> row = db(tb_studio.id==1).select(cache=(cache.ram, 60)).first()
> email = row.emails.select().first()
>
> return dict(row=row, email=email)
>
>
> In Version 2.0.8 (2012-09-07 09:38:35) stable, error occurs:
>
> File "/usr/home/jose/web2py/applications/dm/controllers/default.py"
> <http://127.0.0.1:8000/admin/default/edit/dm/controllers/default.py>, line
> 45, in bg_studio
> email = row.emails.select().first()
> AttributeError: 'Row' object has no attribute 'emails'
>
> Jose
>
--