Thanks Massimo but with:
links = [dict(header=T('Brand'), body=lambda row: 
(db.brands(row.brand_id_01).name))]
it give me this error:
<type 'exceptions.AttributeError'> 'NoneType' object has no attribute 
'name' 

I've also tried with reference:
db.products.brand_id_01.represent = lambda id,row: '%s' % 
db.brands[row.brand_id_01].name()
But error still the same:
<type 'exceptions.AttributeError'> 'NoneType' object has no attribute 
'name' 

How can I do ?

Best regards.

Il giorno domenica 8 dicembre 2013 23:29:53 UTC+1, Massimo Di Pierro ha 
scritto:
>
> Try replace
>
> lambda row: (something that return the brands.name of the 
> products.brand_id_01 current row)
>
> with
>
> lambda row: 
> (db.brands<http://www.google.com/url?q=http%3A%2F%2Fdb.brands.name&sa=D&sntz=1&usg=AFQjCNE3jQMLe-HFn1TMWcTiEsecaE2E1w>
> (row.brand_id_01).name)
>
> On Sunday, 8 December 2013 11:26:34 UTC-6, Gael Princivalle wrote:
>>
>> Thanks Stifan but also with:
>> db.products.brand_id_01.requires = IS_IN_DB(db, db.brands.id, '%(name)s')
>> web2py don't display the 
>> "db.brands.name<http://www.google.com/url?q=http%3A%2F%2Fdb.brands.name&sa=D&sntz=1&usg=AFQjCNE3jQMLe-HFn1TMWcTiEsecaE2E1w>"
>>  
>> instead of the "db.products.brand_id_01"..
>>
>> A solution could be make lambda function, what do you think about 
>> something like that ?
>> In the controller:
>> def products_listing():
>>     query=db.products
>>     links = [dict(header=T('Brand'), body=lambda row: (something that 
>> return the brands.name of the products.brand_id_01 current row)]
>>     fields = 
>> (db.products.id_01,db.products.code,db.products.description,db.products.brand_id_01)
>>     grid = SQLFORM.grid(query, fields=fields, links=links)
>>     return dict(grid=grid)
>>
>> Is it possible ?
>>
>> Il giorno domenica 8 dicembre 2013 17:10:18 UTC+1, 黄祥 ha scritto:
>>>
>>> i think you should refer it to db.brands.id. e.g.
>>> db.define_table('brands',
>>>                 Field('id_01', unique = True),
>>>                 Field('name'),
>>>                 format='%(name)s')
>>> db.define_table('products',
>>>                 Field('code', unique=True),
>>>                 Field('description'),
>>>                 Field('brand_id_01', 'reference brands', requires = 
>>> IS_IN_DB(db, db.brands.id, '%(name)s')))
>>>
>>> it requires the table products to refer to brands id field not id_01 in 
>>> table brands. not sure what do you want to achieve in here, i think you can 
>>> make conditional requires.
>>> e.g. (not tested)
>>> if 'crm' in request.function :
>>>     db.products.brand_id_01.requires = IS_IN_DB(db, db.brands.id, 
>>> '%(id_01)s')
>>> else:
>>>     db.products.brand_id_01.requires = IS_IN_DB(db, db.brands.id, 
>>> '%(name)s')
>>>
>>> my point is the reference field in products table is refer to the id 
>>> field on brands, and for the field represented on drop down list is base on 
>>> the function, if it contain 'crm' it will show the brands.id_01, other 
>>> function will show the name.
>>>
>>> ref:
>>>
>>> http://web2py.com/books/default/chapter/29/07/forms-and-validators#Database-validators
>>>
>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Record-representation
>>>
>>> best regards,
>>> stifan
>>>
>>

-- 
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/groups/opt_out.

Reply via email to