Thanks for your reply, Richard. 
in the database, there is an id field. I removed all the extra properties 
of the grid and doing now simply

grid = SQLFORM.grid(db.inoutexp)

Even that is not working. Error is grid not defined. 

After a bit more investigation, I found the problem is related to use of 
row in lambda function which could mean that grid is indeed not defined. 

In the db definition

Field.Virtual('myamount', lambda row: float(row.price)*row.qty, 
label=T('Amount'))
Field.Virtual('test', lambda row: 'hello')


The first one will break the code and second will work. 


Any idea how to walk around the issue? Thanks again. 


On Monday, August 8, 2016 at 3:42:26 PM UTC+2, Richard wrote:
>
> Do you have an "id" field defined?
>
> Richard
>
> On Sat, Aug 6, 2016 at 6:31 AM, Vic Ding <[email protected] <javascript:>
> > wrote:
>
>> I created the table initially without the virtual field 'amount' and 
>> added it lately. 
>> When I use a string or number in the lambda like: lambda row: 'test', it 
>> works fine.
>> However, when I use lambda row: row.id it gave the error below. It's 
>> really like push here and feel the pain 2km away. 
>> Someone get some idea? Thanks!
>>
>> my db:
>>
>> db.define_table('inoutexp',
>>                 auth.signature,
>>
>>                  
>>                 Field('qty', 'integer', requires=IS_NOT_EMPTY()),
>>                 Field.Virtual('amount', lambda row: row.qty, 
>> label=T('Amount'))
>>
>>                 )
>>
>>
>> simply a grid:
>>
>> grid = SQLFORM.grid(db.inoutexp)
>>
>>
>> The error:
>>
>> Function argument list
>>
>> (self=<Row { 'qty': 5, '...ime.datetime(2016, 8, 3, 14, 9, 46)}>, 
>> k='inoutexp.amount')
>> Code listing
>>
>> 71.
>> 72.
>> 73.
>> 74.
>> 75.
>> 76.
>>
>> 77.
>> 78.
>> 79.
>> 80.
>>
>>                 self[key] = e(key)
>>                 return self[key]
>>         except Exception as e:
>>             raise e
>>
>>         raise KeyError
>>
>>
>>     __str__ = __repr__ = lambda self: '<Row %s>' % 
>> self.as_dict(custom_types=[LazySet])
>>
>>     __int__ = lambda self: self.get('id')
>>
>> -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to