thnx, 
 
but my goal is to prevent repeated queries for the same record when 
accessing ref fields on rows from the same result set.
 
I'm missing something, how do those Virtual Fields achieve that?
 
And about the join, wouldn't that mean it won't work on GAE?
 

On Thursday, August 15, 2013 2:19:06 PM UTC+2, Anthony wrote:

> On Thursday, August 15, 2013 6:57:23 AM UTC-4, Quint wrote:
>
>> like this?
>>  
>> You run a query with an extra option specify the ref fields to pre-fetch. 
>> and then it would query all the referenced rows in a smart way (only fetch 
>> a record 1x).
>>  
>> Is there a  generally accepted way to handle this (in the absence of  the 
>> mentioned feature)?
>>
>
> Well, the most efficient way is probably to do a join, but that results in 
> a somewhat different type of object.
>  
>
>>  
>> Right now I'm fetching my rows and loop over it and store the referenced 
>> rows in a dictionary and at the end use the dict to store the fetched rows 
>> on the parent rows.
>> Then a pass the composite thing to my view.
>>
>
> I suppose you could also do something like that using Field.Virtual:
>
> db.define_table('person',
>     Field('name'),
>     Field.Virtual('dogs', lambda r: r.person.dog.select()))
>
> db.define_table('dog',
>     Field('name'),
>     Field('owner', 'reference person'))
>
> bob = db(db.person.name == 'Bob').select().first()
> print bob.dogs
>
> Or going in the other direction:
>
> db.define_table('person',
>     Field('name'))
>
> db.define_table('dog',
>     Field('name'),
>     Field('owner', 'reference person'),
>     Field.Virtual('owner_record', lambda r: db.person(r.dog.owner)))
>
> spot = db(db.dog.name == 'spot').select().first()
> print spot.owner_record.name
>
> Note, don't define these virtual fields in both tables at the same time, 
> as that will lead to infinite recursion when attempting a select from 
> either one.
>
> Anthony
>

-- 

--- 
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