Hi!
I'm trying to use custom forms for the actions used internally by the SQLFORM.grid and that are called by the grid links.
I got all that working but now I need to do my own data manipulation after the grid processes and accepts the form. However if I call "mygrid.update_form.accepted" nothing happens and it's because the grid's internal do the redirect after the update_form processing!
This preclude any form post processing outside the grid.
After a lot of research I developed the follow method to work with SQLFORM.grid and custom forms:
controller action: facilities_list()
grid = SQLFORM.grid(query, args=request.args[:2], field_id=
db.facility.id, formname='grid_facilities')
if 'edit' in request.args:
form = grid.update_form
if form.accepted:
### custom processing here ###
session.flash = 'Facility updated!'
redirect(URL(request.controller, 'list'))
response.view = '%s/facility_edit.%s' % (request.controller, request.extension)
return dict(item_name=db.facility._singular, form=form)
return dict(item_name=db.facility._singular, grid=grid)
However the code inside the block "if grid.update_form.accepted:" is never executed because what I explain above.
The only solution a found was change the SQLFORM.grid code to accepts one more parameter "custom_form=False" (defaults to false) and in the case it's True (when using custom forms) it don't redirects to the referrer and return normally and so I can test the updated_form.accepted, do my custom processing and redirect by myself.
Another important behavior would be make available the referrer in the grid for external access like this:
if grid.update_form.accepted:
### custom processing here ###
session.flash = 'Facility updated!'
redirect(grid.referrer)
I apologize if already there is a possible solution for this!
Thanks in advance.