Not as easy as I thought... :(
Richard On Mon, Dec 12, 2011 at 4:21 PM, Richard Vézina <ml.richard.vez...@gmail.com > wrote: > I would need a way to display my updated rows in line... > > I just though that I could combine SQLTABLE and for each row of my rows > query I could embeded a submit button of each of my forms that I could > rename review... Putting all the form fields to hidden I could then make a > onvalidation process that update the fields I want to set the records to > reviewed... So the user has only to submit each row for review the whole > SQLTABLE diplayed rows... > > What do you think? > > Richard > > > On Mon, Dec 12, 2011 at 4:12 PM, Richard Vézina < > ml.richard.vez...@gmail.com> wrote: > >> Thanks Anthony... >> >> Here what I did so far... >> >> >> ## CONTROLLER >> def bunch_review_with_multi_form(): >> >> # Getting lot and test from args or vars... >> rows = db((db.lotns_lot_number.id == request.args(1))&\ >> (db.lotns_sample.lot_number_id == db.lotns_lot_number.id)&\ >> (db[request.args(0)].sample_id == >> db.lotns_sample.sample_id)).select\ >> (db.lotns_lot_number.lot_number_computed, >> db.lotns_sample.sample_code, \ >> db[request.args(0)].ALL, orderby=db.lotns_sample.sample_code) >> >> forms = [] >> flag = 0 >> for i in rows: >> forms.append(SQLFORM(db[request.args(0)], i[request.args(0)].id)) >> forms[flag].process(detect_record_change=True) >> if forms[flag].record_changed: >> response.flash = T('form have changed between the time you >> edited and submitted it, please have a look on the data again') >> elif forms[flag].accepted: >> session.flash = T('form accepted').capitalize() >> >> #redirect(URL(request.application,c=request.controller,f='read',args=(request.args[0],request.args[1]))) >> else: >> response.flash = T('please correct the form') >> flag+=1 >> return dict(forms=forms) >> >> ###VIEW >> {{extend 'layout_form.html'}} >> {{for i in range(0,len(forms)):}} >> {{=forms[i]}} >> {{pass}} >> >> >> I am confuse and I am not sure if my controller can works independently >> with each form embeded into forms the way I wrote my controller function... >> What's the way you were telling me to do?? >> >> Thanks >> >> PS.: Is there any way I can make a multiple lines update with SQLFORM or >> .grid or .smartgrid?? >> >> Richard >> >> On Mon, Dec 12, 2011 at 2:40 PM, Anthony <abasta...@gmail.com> wrote: >> >>> web2py creates a hidden _formname field for each form. If there are >>> multiple forms on the page, they must each have a unique _formname. By >>> default, SQLFORM creates a _formname based on the table name and type of >>> form (and possibly record number), but you can generate your own name via >>> the 'formname' argument to form.accepts (or form.validate, or >>> form.process). If you want to create update forms, though, you don't have >>> to manually fill in the field values -- just pass the record as the second >>> argument to SQLFORM. Also, in that case, you'll automatically get a unique >>> _formname for each form because the record id becomes part of the >>> _formname. See >>> http://web2py.com/book/default/chapter/07#SQLFORM-and-insert/update/delete >>> . >>> >>> Also, rather than having a new variable for each form (i.e., form0, >>> form1, etc.), which makes the code rather messy, why not just make a list >>> of forms? >>> >>> forms = [] >>> forms.append(SQLFORM(...)) # add a new form to the list >>> form[i] # to reference the i-th form >>> >>> You might also consider creating each form as an Ajax component, or at >>> least submitting the forms via Ajax, so the whole page of forms doesn't >>> have to get re-processed when just a single form is submitted. >>> >>> Anthony >>> >>> On Monday, December 12, 2011 1:43:05 PM UTC-5, Richard wrote: >>>> >>>> Hello, >>>> >>>> Is there a better way of doing this : >>>> >>>> def bunch_update_with_multi_form()**: >>>> form0=None >>>> form1=None >>>> form3=None >>>> form4=None >>>> form5=None >>>> form6=None >>>> form7=None >>>> form8=None >>>> form9=None >>>> form10=None >>>> form11=None >>>> form12=None >>>> form13=None >>>> form14=None >>>> form15=None >>>> form16=None >>>> form17=None >>>> form18=None >>>> form19=None >>>> form20=None >>>> form21=None >>>> form22=None >>>> form23=None >>>> form24=None >>>> form25=None >>>> form26=None >>>> form27=None >>>> form28=None >>>> form29=None >>>> form30=None >>>> >>>> form_num = 0 >>>> for i in rows: >>>> globals()['form%s'%form_num] = SQLFORM(db[request.args(0)]) >>>> for f in db[request.args(0)].fields: >>>> if globals()['form%s'%form_num] != None: >>>> globals()['form%s'%form_num].**vars[f] = >>>> i[request.args(0)][f] >>>> if globals()['form%s'%form_num] != None: >>>> if globals()['form%s'%form_num].**process().accepted: >>>> response.flash = '...' >>>> elif globals()['form%s'%form_num].**errors: >>>> response.flash = 'form has errors' >>>> form_num+=1 >>>> return >>>> dict(table=table,form0=form0,**form1=form1,form2=form2,form3=** >>>> form3,form4=form4,form5=form5,**form6=form6,form7=form7,form8=** >>>> form8,form9=form9,form10=**form10,form11=form11,form12=** >>>> form12,form13=form13,form14=**form14) >>>> >>>> When using web2py shell I don't have any problem to execute my loops, >>>> but in app I am getting only one correct form on 14... >>>> >>>> I read in the book that SQLFORM is creating it on unique form >>>> identifier but there is no example about that... Should I user SQLFORM >>>> in view (put my loop there) to make it works : >>>> >>>> Thanks >>>> >>>> Richard >>>> >>>> >> >