I'm not suggesting changing the behavior (again due to the compatibility concerns), but I completely agree with the original poster(s).
Also, in my experience it's a much less common case that you're wanting an "I agree" checkbox in your form, versus a "Boolean" field which can be positive or negative. On Jun 16, 9:34 pm, Tai Lee <real.hu...@mrmachine.net> wrote: > This has been discussed many times in the past. For better or worse, > we're stuck with the current behaviour for backwards compatibility. > > I personally think it's better this way. Without this behaviour, it > would be a PITA to implement forms that have a "required" boolean > field (must be ticked) without repeating yourself constantly by > writing custom validation for those fields. Most forms I work with > have a "Yes, I have agreed to the terms and conditions" or "Yes, I > want to receive emails from XYZ" type fields. > > If your boolean fields are not "required" (as per the definition in > Django forms, "must be ticked"), why can't you just put > `required=False` in your form? > > I'd try to avoid patching your local Django with a change like this > unless absolutely necessary so that you can cleanly upgrade and don't > end up writing code that does the opposite of what everyone else > expects. > > Cheers. > Tai. > > On Jun 17, 5:14 am, Michael Blume <blume.m...@gmail.com> wrote: > > > > > > > > > In Django BooleanFields, the required flag is used to mean that the field > > must be checked for the form to validate. Required is True by default for > > all Fields, so this is the default behavior. > > > I strongly suspect that this violates principle of least surprise for most > > people including Boolean Fields in forms. It did for me. > > > I've patched it in my local Django checkout. I realize this is a > > backwards-incompatible change, so it might not be eligible for trunk any > > time soon, but FWIW, here's the patch: > > > --- i/django/forms/fields.py > > +++ w/django/forms/fields.py > > @@ -606,6 +606,11 @@ class URLField(CharField): > > class BooleanField(Field): > > widget = CheckboxInput > > > + def __init__(self, *args, **kwargs): > > + if not args and 'required' not in kwargs: > > + kwargs['required'] = False > > + return super(BooleanField, self).__init__(*args, **kwargs) > > + > > def to_python(self, value): > > """Returns a Python boolean object.""" > > # Explicitly check for the string 'False', which is what a hidden > > field -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.