It's been a while since I've played with smartgrid, but I seem to recall that the ID of the record being edited was always the final arg.
And you can treat request.args as a list, so the ID of the record being edited is request.args[-1], or so it seems to me. On Tuesday, November 20, 2012 7:44:09 AM UTC-5, Michael Hall wrote: > > In the end I have used a different slightly more messy approach. I am > getting the record id from the args by using a conditional to test if it is > in one of 2 possible positions. > > @auth.requires_login() > def contact_manage(): > form = > SQLFORM.smartgrid(db.t_contact,linked_tables=['t_courses','t_membership','t_paypal'], > > onupdate=auth.archive, formname="Contact Manager") > if request.args(2) == 't_contact': > memberId = request.args(3) > else: > memberId = request.args(2) > > return locals() > > I looked into fetching it using similar code to your link function but it > seems you can only request the id of the current record using > db.t_contact.id from within the parameters of your SQLFORM.smartgrid > request. > > Its a dirty hack but it seems to work. > > Mike > > On Tuesday, 20 November 2012 07:15:22 UTC, Johann Spies wrote: >> >> On 19 November 2012 14:58, Michael Hall <pix...@gmail.com> wrote: >> >>> Hi Villas >>> >>> I like the idea of using a var instead of args but I am still uncertain >>> of how I get the ID of the current record I am viewing/editing in smartgrid. >>> >>> >> Here is an example of code I am using where 'auid' represents the id of >> the author record: >> >> links = [lambda row: (A(B(T('Edit')), _target = "_blank", >> _href = URL(r = request, >> c = 'authors', >> f = 'edit_author', >> vars = dict(auid = str(row[ >> db.akb_authors.id])))))] >> query = ... >> fields = [list of fields] >> >> I then call the grid with SQLFORM.grid(query, fields=fields, links=links) >> >> >> Regards >> Johann >> -- >> Because experiencing your loyal love is better than life itself, >> my lips will praise you. (Psalm 63:3) >> >> --