So .. After some investigation, this is probably a problem related to web.input's interpretation when the form is filled.

When a checkbox is checked, web.input() contains this:
<Storage {'french': u'mustard', 'curly': u'', 'moe': u'', 'bax': u'', 'boe': u''}>

On the other side, when it's not checked, the curly key simply disappears:
<Storage {'french': u'mustard', 'moe': u'', 'bax': u'', 'boe': u''}>

I presume that the form is filled using the keys found in web.input() instead of using the list of inputs of the form itself, I didn't put the finger on the exact place where it stands :-[

I'm trying to write the smallest patch for form.py, but I'm not the python's superheroe I would dream of, so I have to work a little on that. ;)

Before I find the holy grail, you might fix this behaviour on your side reading the keys of web.input and checking the checkbox by yourself (always on the example...) :

    def POST(self):
        form = myform()
        if not form.validates():
*            if 'curly' in web.input():
                form['curly'].set_value(True)*
            return render.formtest(form)
        else:
            # form.d.boe and form['boe'].value are equivalent ways of
            # extracting the validated arguments from the form.
return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value)

This seems to give pretty good results here :)

Regards,

Christophe.

Le 08/04/2015 07:52, Christophe a écrit :
Ooops I realize I misunderstood your first question... My apologies.

I ran some test on my side and found that this behavior might be related to the validates() method. I re-used the example given in http://webpy.org/form and modified a little the POST method to understand when the checkbox had lost its checked attribute:

    def POST(self):
        form = myform()
        print form.render() # prints bare HTML in the console
        if not form.validates():
            print form.render() # re-prints if form is'nt valid
            return render.formtest(form)
        else:
            # form.d.boe and form['boe'].value are equivalent ways of
            # extracting the validated arguments from the form.
            print form.render() # re-prints anyway
return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value)

Whenever the form validates or not, I got this in the console:

Konsole output
127.0.0.1:44907 - - [08/Apr/2015 07:37:35] "HTTP/1.1 GET /" - 200 OK *### First call to index*
<table> *### Start of first print*
<tr><th><label for="boe">boe</label></th><td><input type="text" id="boe" name="boe"/></td></tr> <tr><th><label for="bax">bax</label></th><td><input type="text" id="bax" name="bax"/></td></tr> <tr><th><label for="moe">moe</label></th><td><textarea id="moe" name="moe"></textarea></td></tr> <tr><th><label for="curly_">curly</label></th><td>*<input checked="checked" type="checkbox" id="curly_" value="" name="curly"/>*</td></tr> *### In red, the checkbox that won't check, here it is already checked* <tr><th><label for="french">french</label></th><td><select id="french" name="french">
 <option value="mustard">mustard</option>
 <option value="fries">fries</option>
 <option value="wine">wine</option>
</select>
</td></tr>
</table>
<table>
<tr><th><label for="boe">boe</label></th><td><input type="text" id="boe" value="" name="boe"/></td></tr> <tr><th><label for="bax">bax</label></th><td><input type="text" id="bax" value="7" name="bax"/></td></tr> <tr><th><label for="moe">moe</label></th><td><textarea id="moe" name="moe"></textarea></td></tr> <tr><th><label for="curly_">curly</label></th><td>*<input type="checkbox" id="curly_" value="" name="curly"/>*</td></tr> *### Here, checked attribute vanished...* <tr><th><label for="french">french</label></th><td><select id="french" name="french">
 <option selected="selected" value="mustard">mustard</option>
 <option value="fries">fries</option>
 <option value="wine">wine</option>
</select>
</td></tr>
</table>
127.0.0.1:44907 - - [08/Apr/2015 07:37:41] "HTTP/1.1 POST /" - 200 OK

I did'nt look further in the web.py source code to understand this behaviour, but I think you found a little bug related to the validates() method.

I'll take a look later in the day.

Regards,

Christophe.

Le 07/04/2015 23:37, [email protected] a écrit :
Hi Zbouboutchi,

I used

|
myform =form.Form(
...
   form.Checkbox('Image #1',checked=True),
    form.Checkbox('Image #2',checked=True),
    form.Checkbox('Image #3',checked=True)
)
|

in the app.py to define several checkbox whose default status are checked. If I insert

|
<inputtype="checkbox"checked>
|

in the templates/*.html. I just got an additional checkbox (checkbox only without label) which is checked in the first rendering and re-rendering but my own checkbox keep unchanged. Not sure if I understand you correctly. Thank you for your suggestion and help.

Best Regards,
-Yongzhi


On Tuesday, April 7, 2015 at 1:38:20 PM UTC-7, Zbouboutchi wrote:

    (re)Hi,

    I presume using bare HTML might prevent this behaviour:

        <input type="checkbox" checked>


    Regards,

    Christophe.

    Le 07/04/2015 19:56, [email protected] <javascript:> a écrit :
    Hello all,

    I implement a form app by following the online instruction
    (http://webpy.org/form). In my code, I use the definition

        form.Checkbox('Image #1', checked=True),

    so it is checked when user accesses this form page. I noticed
    that if there is any validation failure and the form was
    re-rendered, all checkbox would be in unchecked status. I just
    wonder if there is an easy way to keep all those checkbox
    checked in the re-rendered form. Thanks a lot.

    Best Regards,
    -Yongzhi

-- You received this message because you are subscribed to the
    Google Groups "web.py" group.
    To unsubscribe from this group and stop receiving emails from
    it, send an email to [email protected] <javascript:>.
    To post to this group, send email to [email protected]
    <javascript:>.
    Visit this group at http://groups.google.com/group/webpy
    <http://groups.google.com/group/webpy>.
    For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.

--
You received this message because you are subscribed to the Google Groups "web.py" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/webpy.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "web.py" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/webpy.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/webpy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to