Am Donnerstag 28 August 2008 23:55:24 schrieb Martin Aspeli:
Hermann Himmelbauer wrote:
Am Donnerstag 28 August 2008 02:35:28 schrieb Marius Gedminas:
On Wed, Aug 27, 2008 at 05:15:48PM -0700, Stephan Richter wrote:
On Wednesday 27 August 2008, Martin Aspeli wrote:
This means that if the request contains the empty-marker only (no selection was made) for a checkbox widget (say), then the return value is [], rather than default (NOVALUE).
Is that a bug? I have a custom checkbox widget derived from the standard checkbox widget, (z3c.formwidget.query, in fact), and I never get any "required missing" exceptions, even when I untick all the checkboxes and click OK.
Am I missing something?
I think you have a point. Have you tried changing the behavior to return "default" and see what tests fail? If no major failures come out of this, I would say change it.
Wait a second, maybe I'm misunderstanding this, but I certainly oppose any change that would make an unchecked checkbox an error during form validation.
A required Bool field can have two values: True or False. One is represented by a checked checkbox, the other by an unchecked checkbox. An unchecked checkbox is not missing input and should not trigger "required missing" errors.
I see this the same way - in my application I have a similar case (Accept some policy by a checkbox-click). I solved this simply by checking the value in the action handler and raising a WidgetExecutionError if it is unchecked.
The notion of a "required" boolean field is a bit weird anyway.
I think you *could* interpret it so that a boolean field that's required really means "you have to tick this box" (e.g. an "I agree to these terms and conditions" type scenario).
My idea is to look at it bottom-up: Think about schemas without widgets at all, e.g. in a totally different non-zope/form scenario. To my mind, it's obvious, that required="True" means, that some sort of value has to be given and not, that the value has to be of a specific type (e.g. "True" for Boolean).
To put it the other way - how would you have a non-required boolean field represented by a checkbox? You really need three states then: True False and None, which you can't get with a checkbox.
Well, and then there's the representation of fields by widgets. And, right, it's impossible to provide no value via a checkbox or a radio-box offering "yes/no". And, yes, this somehow obsoletes the "required" constraint. But isn't this perfectly normal for widgets? For instance, a Choice, which is represented by a drop-down widget, will also never return None. Btw., it is possible to have a three-state widget for booleans, such as a drop-down widget, that includes "True/False/None", although it may not make much sense. Best Regards, Hermann -- hermann@qwer.tk GPG key ID: 299893C7 (on keyservers) FP: 0124 2584 8809 EF2A DBF9 4902 64B4 D16B 2998 93C7