Hi, Why are field default lambdas being executed always (as part of define_table)?.
* Example: def xdefault(v): print '===== VALUE > %s' % v return v db.define_table( 'xtable', Field('xfield1', default=lambda: xdefault('v1')), Field('xfield2', default=lambda: xdefault('v2')), Field('xfield3', default=lambda: xdefault('v3')), ) * Output: ===== VALUE > v1 ===== VALUE > v2 ===== VALUE > v3 * Stack trace for one of them: File C:\web2py\gluon\dal.py in define_table at line 4156 self._adapter.create_table(t,migrate=migrate,fake_migrate=fake_migrate,polymodel=polymodel) File C:\web2py\gluon\dal.py in create_table at line 551 not_null = self.NOT_NULL(field.default,field.type) File C:\web2py\gluon\dal.py in NOT_NULL at line 750 return 'NOT NULL DEFAULT %s' % self.represent(default,field_type) File C:\web2py\gluon\dal.py in represent at line 1200 obj = obj() File C:\web2py\applications\test\models\db.py in <lambda> at line 88 ... Field('xfield', default=lambda: xdefault('===== VALUE =====')), ... File C:\web2py\applications\test\models\db.py in xdefault at line 83 I thought it was safe to put lambdas as field default values with the certainty that they won't be executed unless / until absolutely required (when new instances of the table are created without such default values), i.e. deferred execution. Is this the expected behavior?. p.s. I'm using trunk. Thanks, Carlos