In the Official web2py Book I read about DAL's Virtual Fields that:
"...each method of the class that takes a single argument (self) is a new
virtual field."
It seems however that any function of the class is treated as a new field
and called to calculate its value. As an example I added a support function
to the class:
class MyVirtualFields(object):
def total_price(self):
return self.support_function(self.item.unit_price,
self.item.quantity)
def support_function(self, price, quantity):
return price*quantity
And on row retrieval I receive the following exception:
TypeError: support_function() takes exactly 3 arguments (1 given)
As a workaround I can add default values for arguments and additional
checks in the support function. But I wonder what is the proper way to add
a non-field function to the class?
Thank you!
Dmitry
from gluon.dal import DAL, Field
db = DAL('sqlite://sqlite.db')
db.define_table('item',
Field('unit_price','double'),
Field('quantity','integer'))
class MyVirtualFields(object):
def total_price(self):
return self.support_function(self.item.unit_price, self.item.quantity)
def support_function(self, price, quantity):
return price*quantity
db.item.virtualfields.append(MyVirtualFields())
db.item.insert(unit_price=10, quantity=50)
rows = db(db.item).select()