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

Reply via email to