On 9 Lug, 17:50, Rob <[email protected]> wrote:
> Hi mdipierro,
>
> Thanks for the answer!  I have some questions.
>
> 1) using the SQLFORM syntax with list comprehension below, how do I
> add additional fields?  I need to add 'hidden' fields that match the
> name of the 'checkbox' fields - otherwise, non-checked items don't get
> put in request.vars and I don't want to assume they are false (ie:
> Pagination)

SQLFORM(...,hidden=dict(a="b")

>
> 2) Since we're building the form with values from the DB in the
> beginning of the function, then updating the DB, then returning the
> form, the view gets a stale copy of the form.  I guess you could solve
> this with a redirect if form.accepts() is true?  Seems hackish...

Can you provide a text case?

> Thanks for the help :)
>
> On Jul 9, 5:44 am, mdipierro <[email protected]> wrote:
>
> > This should work:
>
> > def index():
> >     items = db().select(db.Item.ALL)
> >     form=SQLFORM.factory(*[Field('need_%s'%item.id, default=item.need)
> > for item in items])
> >     if form.accepts(request.vars,session):
> >        for item in items:
> >           need = not request.vars['need_%s'%item.id]==None
> >           item.update_record(need=need)
> >    return dict(form=form)
>
> > On 9 Lug, 01:04, Rob <[email protected]> wrote:
>
> > > Hi All,
>
> > > Sorry for the noob post, but I'm having an issue.  I'm trying to do a
> > > little toy 'shopping list' app - the index page is to have a list of
> > > 'items' on the page with a 'need' checkbox and an 'update' button.
> > > When the update button is pressed, the database is to be updated with
> > > the new checked values.
>
> > > here is the db:
>
> > > db.define_table('Item',
> > >     Field('description'),
> > >     Field('need', 'boolean')
>
> > > here is the controller:
> > > def index():
> > >     table = TABLE()
> > >     items = db().select(db.Item.ALL)
> > >     for item in items:
> > >         chk = INPUT(_type='checkbox', _name='need_%s' % item.id,
> > > value=item.need)
> > >         table.append(TR(item.id,item.description,chk))
> > >     form = FORM(table,INPUT(_type='submit'))
> > >     if form.accepts(request.vars,session):
> > >         for k,v in request.vars.items():
> > >             if k.startswith('need_'):
> > >                 id = k.split('_')[-1]
> > >                 item = db(db.Item.id == int(id)).select()[0]
> > >                 item.update_record(need=(form.vars[k]=='on'))
> > >     return dict(form=form)
>
> > > view: default/index.html
> > > {{extend 'layout.html'}}
> > > {{=form}}
>
> > > This doesn't quite work right - it's close and it feels like a
> > > kludge.  I need to set the checkbox value to the proper 'request'
> > > variable, but I don't process those until the end of the function...
> > > am I on the right track here?  I found most of this code on a forum
> > > somewhere.
>
> > > Thanks for the help... it sucks just starting out!
>
> > > -Rob

Reply via email to