You know web2y better than me. I had forgotten about Rows.as_dict()

If option 2 works with you, use 2.

On Apr 5, 3:13 am, Iceberg <iceb...@21cn.com> wrote:
> Old problem solved, new problem arises.
>
> There is a somewhat obvious difference which I did not notice before.
>
>   (1) db.table.virtualfields.append(ComputedFields())
>   This need to be executed BEFORE db().select(), otherwise it will NOT
> affect the select result rows.
>
>   (2) rows.setvirtualfields(table=ComputedFields())
>   This of course can only be used AFTER you've got the rows (and you
> can't possibly go to the wrong way.)
>
> However, there must be some more subtle difference I don't know yet.
> Even I use (1) BEFORE my db().select(), I found that is much slower
> (perhaps due to some lazy function call). And worse, (1) can't support
> "virtual field has SAME name as real field", while (2) can. My code
> looks like:
>
>   class VirtualFields:
>       distributors=db().select(db.Distributor.id,db.Distributor.name,
>           cache=(cache.ram,3600*24)).as_dict()
>       def income(self):
>           # round the real field "income" into "per thousand" unit
>           return self.mytable.income / 1000.0
>       def distributor(self):
>           # tend to change real field "distributor" from id to its
> name
>           return self.distributors.get(
>               self.Orders.distributor,{}).get('name')
>
> So I think I have to stick to usage (2), do I?
>
> BTW, I am using the latest web2py trunk on Windows XP.
>
> Regards,
> Iceberg
>
> On Apr5, 12:18pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > I just did this as a test and it worked:
>
> > >>> db=DAL('sqlite:memory:')
> > >>> db.define_table('test',Field('quantity','integer'))
> > >>> class VirtualFields():
>
> > ...     def profit(self): return self.test.quantity*100>>> 
> > db.test.virtualfields.append(VirtualFields())
> > >>> db.test.insert(quantity=5)
> > 1
> > >>> rows=db(db.test.id>0).select()
> > >>> for row in rows: print row
>
> > ...
> > <Row {'update_record': <function <lambda> at 0x1b8dbb0>, 'profit':
> > 500, 'id': 1, 'delete_record': <function <lambda> at 0x1b8dab0>,
> > 'quantity': 5}>
>
> > Sure you are running an updated version of web2py? Which os? which
> > version?
>
> > > > On Sun, Apr 4, 2010 at 10:51 PM, Iceberg <iceb...@21cn.com> wrote:
> > > > > Hi there,
>
> > > > > I search virtualfields inhttp://www.web2py.com/bookbutfound
> > > > > nothing.
>
> > > > > So I read this post instead:  
> > > > > https://groups.google.com/group/web2py/browse_frm/thread/d59ee3d6c2e6...
>
> > > > > But I found that
> > > > >  db.table.virtualfields.append(ComputedFields())
> > > > > doesn't work.
>
> > > > > Only this work:
> > > > >  rows.setvirtualfields(table=ComputedFields())
>
> > > > > Does the former syntax really supposed to exist?
>
> > > > > I am using web2py 1.75.4
>
> > > > > Regards,
> > > > > Iceberg

-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.

Reply via email to