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.