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.