I see the problem. When the grid involves a join, you must refer to fields
within a row via the row.table.field format. However, when you view/edit a
record from such a grid, only the record from a single table is shown
(i.e., there is no longer a join involved), so you must now refer to fields
within a row via the row.field format. Because your "link" appears in the
grid as well as in the view/edit page, whichever format you use to refer to
the id field, it will result in an error in one of those two contexts.
So, all you need to do is ensure your code works in both contexts. Here's a
simple trick:
Instead of:
row.workers_skills.id
do:
row.get('workers_skills', row).id
The .get() method retrieves the 'workers_skills' key, but if it doesn't
exist, it instead returns a default value, which in this case is just the
original row. We then retrieve the "id" field of that returned object
(either the original row or the row.workers_skills sub-row).
This is a tricky problem to fix in a general way. The grid could
automatically set the "compact" attribute of the Rows object to False
whenever the grid involves a join, even when calling the view/edit actions,
which would enable a consistent interface for accessing field values.
However, that would then cause problems with widgets and represent
attributes defined on the database fields, which would be expecting
row.field syntax.
In fact, there is a more general problem here -- any field represent
attribute that accesses other fields in the row will fail if the row is
part of a join.
Anthony
On Sunday, November 1, 2015 at 1:08:04 AM UTC-4, Yebach wrote:
>
> I dont have special function for edit. When I click the icon on to edit
> the record I get this error. I did not wrote any special function. I am
> using web2py's
>
> 2015-11-01 11:38 GMT+08:00 Anthony:
>
>> On Friday, October 30, 2015 at 11:03:18 PM UTC-4, Yebach wrote:
>>>
>>> The thing is IF I put links = [lambda row: A('',_class='glyphicon
>>> glyphicon glyphicon-remove-sign',
>>> callback=URL('settings','deactivate',vars=dict(table='workers_skills',field
>>> = 'ws_status'
>>> ,value = row.workers_skills.id )))]
>>>
>>> Then my function for "deleting" record works but when I want to go to
>>> edit I get an error. If I put row.id then the oposite
>>>
>>
>> I'm not sure I follow. What do you mean by "go to edit"? Assuming edit is
>> a separate action/page, how could the callback URL you are using for delete
>> affect the edit action? Can you show the code related to editing?
>>
>> Anthony
>>
>>> --
>> 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 a topic in the
>> Google Groups "web2py-users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/web2py/3T1Qaf39wJg/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Lep pozdrav
>
> Vid Ogris
>
>
>
--
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.