so, I read the docs and.....
I think either there's a bug or I'm doing something wrong....
in db.py
---------------
.....
db.define_table('test',
Field('name', length=5)
)
class TestLazy:
def lazy_test_field(self):
def lazy(self=self):
return self.test.name
return lazy
class TestNotLazy:
def not_lazy_test_field(self):
return self.test.name
db.test.virtualfields.append(TestLazy())
db.test.virtualfields.append(TestNotLazy())
----------------
Testing in the shell
web2py Shell Version 1.83.2 (2010-08-15 08:16:30)
In[0]: set = db(db.test.id>0).select()
Out[0]:
In[1]: set.as_dict()
Out[1]: {1: {'name': 'miao', 'id': 1, 'not_lazy_test_field': 'miao'},
2: {'name': 'bau', 'id': 2, 'not_lazy_test_field': 'bau'}}
In[2]:for row in set:
print row.id, row.name, row.not_lazy_test_field
Out[2]:
1 miao miao
2 bau bau
In[3]:
for row in set:
print row.id, row.name, row.not_lazy_test_field,
row.lazy_test_field
Out[3]:
1 miao miao <function lazy at 0x2e5c2a8>
2 bau bau <function lazy at 0x308ec80>
In[4]:
for row in set:
print row.id, row.name, row.not_lazy_test_field,
row.lazy_test_field()
Out[4]:
1 miao miao bau
2 bau bau bau
sorry for the unmeaning data in the set, but...seems that lazy
virtualfield is evaluated every line (different hash function when you
try to print row.lazy_test_field without parenthesis, In[3]) but it
returns data computed for the last line in the set...in all the rows
of the set itself (In[4])
Can somebody point me in the right direction ?
Thanks