OK, using a debugger, I found out my problem.
When doing a left join, the "row" variable does not contain directly the
fields. We must use row.table_name.field_name instead.
This is now working. Problem solved.
Seb
On Tuesday, January 15, 2013 4:13:45 PM UTC+1, Sebastien Stormacq wrote:
>
> Dear All,
>
> In one of my views, I am using a SQLForm.grid object. The grid is fed
> with a table that has two computed fields and the query needs a LEFT JOIN
> to another table.
> The grid also use 'Links' to compute a field (create an column with an IMG
> element depending on a column's value)
>
> Everything is OK, except when I mix computed fields and left join.
>
> Left join alone is OK
> Computed field alone is OK
>
> Here is my model
>
> db('message',
>
> Field('address', 'text'),
>
> Field('date', 'datetime', required=True),
>
> Field('flags', 'integer'),
>
> Field('msgaccount', 'text'),
>
> Field('msgflags', 'integer'),
>
> Field('msghandle', 'text'),
>
> Field('ismsg', 'integer'),
>
> Field('text', 'text', required=True),
>
> Field('cfrom', 'text', compute=lambda r: computeCFrom(r)),
>
> Field('cflags', 'integer', compute=lambda r: computeCFlags(r)))
>
> Here is my grid
>
> grid = SQLFORM.grid(dbMsg.message,
>
> fields=[dbMsg.message.address,
> dbMsg.message.date, dbMsg.message.flags,
>
> dbMsg.message.msgaccount,
> dbMsg.message.msgflags,
>
> dbMsg.message.msghandle,
> dbMsg.message.ismsg, dbMsg.message.text,
>
> dbMsg.message.cfrom,
> dbMsg.message.cflags,dbMsg.address.description ],
>
> field_id=dbMsg.message.id,
>
>
> #left=dbMsg.address.on(dbMsg.message.cfrom==dbMsg.address.address),
>
> orderby=~dbMsg.message.date,
>
> maxtextlengths={'message.date':5,
> 'message.cfrom':20, 'address.description':20, 'message.text':160},
>
> headers={'message.cfrom' : T('From')},
>
> editable=False,
>
> create=False,
>
> details=False,
>
> deletable=False,
>
> csv=False,
>
> selectable=lambda ids: delete(ids),
>
> selectable_text=T('Delete'),
>
> links=[dict(header=T('Flags'), body=lambdarow:
> formatFlag(row.cflags, row.ismsg))],
>
> ui='jquery-ui')
>
>
> The 'links' attribute is working with the left attribute commented out.
>
> When removing the comment on the 'left' attribute, I do receive at runtime
>
> ERROR - Exception occurred in SQLFORM.grid : 'Row' object has no attribute
> 'cflags'
>
>
> I am new to web2py, maybe I missed something obvious with computed fields
> and grid.
>
>
> Thanks for your help
>
>
> Seb
>
>
--