id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux 20931 RadioSelect, RadioSelectMultiple, CheckBoxSelect, CheckBoxSelectMultiple do not render nested option sets correctly Dylan Verheul Christopher Babiak "The `Select` widget is the default widget to handle fields that make use of `choices`. These are commonly rendered as a HTML `select`, as implemented for `django.forms.widgets.Select`. Sometimes a series of radio buttons or checkboxes is a better fir for the UI. Django supports this by implementing widgets that can stand in for `Select`. These are `RadioSelect`, `RadioSelectMultiple`, `CheckBoxSelect`, `CheckBoxSelectMultiple`. The choices to render are implemented as a n iterable of 2-tuples as documented here: https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices As stated in the documentation, `choices` can be grouped for organizational purposes. The example given: {{{ MEDIA_CHOICES = ( ('Audio', ( ('vinyl', 'Vinyl'), ('cd', 'CD'), ) ), ('Video', ( ('vhs', 'VHS Tape'), ('dvd', 'DVD'), ) ), ('unknown', 'Unknown'), ) }}} When using a `Select` or `SelectMultiple` widget, these groups are rendered as HTML `optgroup` elements. This is correct. When using any of the other widgets mentioned, the organizational groups are not taken into account when rendering the widget. Instead, the entire group is forced to text without escaping, resulting in a single widget for each group, with the text representation of the list as its label (newlines and spaces added for better readability): {{{ }}} The solution for this would be take have the renders of these widgets mimic the behavior of `Select.render_options`, but instead of `optgroup` an extra level of `ul` would have to be generated. In pseudo-HTML, for the given example: {{{ }}}" Bug closed Forms dev Normal fixed choices Carl Meyer Accepted 0 0 0 0 0 0