I have done something similar to what you are looking for but it was a little fiddly in places (if someone can suggest a better way I would be delighted!). My application had some extra functionality but the gist of it is:
You have a form and a grid. You can put these on the same page easily using LOAD component. {{=LOAD(f='edit.load', ajax=True, args=.....}} {{=LOAD(f='grid.load', ajax=True, args=.....}} Now you have them on the same page. ########################################### But when you add/edit a grid row then you have 2 forms and 2 submit buttons on the page which is odd. So I used a dialog box for the add/ edit functions. This is actually quite easy as the majority of the code is already included in web2py. In the view you do this: // create dialogbox document.write("<div id='dialogdiv' style='display:none'></div>") $(document).ready(function(){ $('#dialogdiv').dialog({autoOpen : false, modal : false, width : 'auto'}); }) // open url in dialog box function dialog(url) { web2py_ajax_page("get", url, {_newformjs:"$ ('#dialogdiv').dialog('open')"} , 'dialogdiv') } Now if you pass any url to the javascript dialog function it will call the controller and open the form in a dialog box; and return any form errors inside the dialog box. And only half a dozen lines of code!! ####################################### Now you need to make the form open and close. In the edit controller (for person) you do this: if form.process(.....).accepted: response.js=v._onacceptjs return elif form.errors: pass else: response.js=v._newformjs ############################################################ and in the grid controller you setup the dialog close and rewire the buttons def dialog(url): """ returns javascript to show the view as a dialog box """ return "dialog("+quote(url)+"); return false;" def grid(): editvars['_onacceptjs']="$('#dialogdiv').dialog('close');" links.append(lambda row: A(SPAN(_class='ui-icon ui-icon-pencil'), SPAN('Edit',_class='ui-button- text',_title='Edit'), _onclick=dialog(URL(editcontroller, vars=editvars, args=[a.tablename, row.id])), _class='ui-button-text-icon-primary', _id='edit')) On Dec 21, 1:54 pm, Cliff <cjk...@gmail.com> wrote: > Remember web2py uses the term 'form' in a very specific way. > > So don't think about a web2py form for CRUD operations on child > records. You need a way to dynamically update the web page so it can > manage the child records. Web2py provides several approaches to this > problem. > > The image blog example in the book outlines a design approach that > will solve your > problem.http://web2py.com/books/default/chapter/29/3#An-image-blog > > Also look here for other > solutions:http://web2py.com/books/default/chapter/29/11#The-ajax-functionhttp://web2py.com/books/default/chapter/29/12#Components > > On Dec 21, 1:22 am, Martin Weissenboeck <mweis...@gmail.com> wrote: > > > > > > > > > Ok, thank you - I will try it. > > > 2011/12/21 Nik Go <nikolai...@gmail.com> > > > > Martin, > > > > I have a feeling that what you're looking is "multi-form updates" (try to > > > search for that term) where a parent record (your "person") and child > > > record (your "cvrows") are updated simultaneously. > > > > On Wednesday, December 21, 2011, Jim Steil wrote: > > > >> have you looked at SQLFORM.smartgrid? > > > >> -Jim > > > >> On 12/20/2011 1:39 PM, Martin Weissenboeck wrote: > > > >> Thanks for all hints, I have found some new ideas and I will try a ot of > > >> new things. > > > >> But -may I describe my problem in detail? > > >> There should be a website for persons who want to apply for a job. > > > >> My present solution: > > >> Table "person" contains name, date of birth, phone number and so on. > > >> Table "cv" (curriculum vitae) contains for each person zero or more rows. > > >> Each row consists of the dates of the start and the end of the occupation > > >> and some details about the occupation. > > > >> Page one is a SQLFORM of table "person" with a submit button. If the form > > >> is filled without errors the user is redirected to the second page. There > > >> is a SQLFORM.grid of table "cv" on this page. Of course person.id from > > >> page one is used on page two. Page two has it's own submit button. > > > >> My question: > > >> It would be nice to have both forms (the form for the person and the form > > >> for some rows of cv) on one page with only one submit button. Is there > > >> any > > >> way to concatanate these two forms? > > > >> 2011/12/19 Cliff <cjk...@gmail.com> > > > >>> Martin, > > >>> There has been discussion about manipulating grid. Search for threads > > >>> containing form.create() > > > >>> Also perhaps Anthony will chime in. He knows this stuff pretty well. > > > >>> apple, > > >>> > Surely the grid is just a grid and does not have a submit button? > > > >>> SQLFORM.grid is much more than that. > > > >>>http://web2py.com/books/default/chapter/29/7#SQLFORM.grid-and-SQLFORM...) > > > >>> On Dec 19, 9:48 am, apple <simo...@gmail.com> wrote: > > >>> > Surely the grid is just a grid and does not have a submit button? > > > >>> > Do you mean that you have a grid linked to a form and you want to > > >>> > refresh it when the form is submitted? > > > >>> > On Dec 18, 9:10 pm, Martin Weissenboeck <mweis...@gmail.com> wrote: > > > >>> > > Hi, > > >>> > > I have one form created with SQLFORM and another form created with > > >>> > > SQLFORM.grid. Each form has its own submit-button. > > >>> > > Is there a simple way to concatanate these forms to one form, which > > >>> could > > >>> > > be sent with one submit-button? > > > >>> > > Regards, Martin