On Oct 25, 7:54 pm, mdipierro <
mdipie...@cs.depaul.edu> wrote:
> On Oct 25, 1:17 am, Ruiwen Chua <
rwc...@gmail.com> wrote:
>
> > I see. So form.accept() will not parse any field unless explicitly
> > defined in SQLFORM?
>
> > (Ok I'm not sure if I should start another thread for this, but a few
> > issues I found with using SQLFORM.. so perhaps I'm still doing
> > something wrong.)
>
> > a) I have multiple forms (for the same model) on a page, now generated
> > using SQLFORM
>
> > However, each generated SQLFORM gives identical id attributes in the
> > <div>s it generates, and that breaks validation
>
>
http://www.web2py.com/book/default/chapter/07#Multiple-forms-per-page
>
Thanks for the pointer. I just tried the example on that page and got:
in the_view.html
<div id="example">
<form action="" enctype="multipart/form-data" method="post">
<div id="answer_response__row">
<!-- snip -->
</div>
<div id="submit_record__row">
<!-- snip -->
</div>
<div class="hidden">
<input name="_formname" type="hidden" value="form_one" />
</div>
</form>
<form action="" enctype="multipart/form-data" method="post">
<div id="answer_response__row">
<!-- snip -->
</div>
<div id="submit_record__row">
<!-- snip -->
</div>
<div class="hidden">
<input name="_formname" type="hidden" value="form_two" />
</div>
</form>
</div>
and in thecontroller.py
f1 = SQLFORM(db.answer, formstyle='divs')
f2 = SQLFORM(db.answer, formstyle='divs')
if f1.accepts(request.vars, formname='form_one'):
response.flash = 'form one accepted'
if f2.accepts(request.vars, formname='form_two'):
response.flash = 'form two accepted'
The issue with duplicate HTML id attributes I'm referring to is such:
Note that "<div id="answer_response__row">" and " <div
id="submit_record__row">" both appear twice, once for each form.
As far as I know, HTML id attributes shouldn't repeat in the same HTML
document. So I'm not too sure if this behaviour is intentional?
> > b) I need these forms to post to a different controller from the one
> > that generated them (via normal post or AJAX)
>
> > What's the best way to get the receiving controller to recognise the
> > incoming form with the hidden fields, seeing as it was generated in a
> > different controller?
>
> If you have the form object:
> accpets(request.post_vars,None,formname=None)
> If you do not just use request.vars and do an db io manually.
> Using a different controller function breaks validation.
Unfortunately, I don't have the original form object, since it was
generated in another controller, say A, while I'm posting to
controller B.
I got around this issue by instantiating a new SQLFORM in the
receiving controller, then calling form.accepts(...) on it.
Seems to work that way.