Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Anton's answer worked, and was a decent answer for a while there - but unfortunately it became unmaintainable. So, taking a cue from <a href="https://code.djangoproject.com/attachment/ticket/9230/forms.py.diff" rel="nofollow">a diff</a> attached to <a href="https://code.djangoproject.com/ticket/9230" rel="nofollow">django ticket #9230</a>, I just monkey patched <code>django.forms.forms.BoundField</code></p> <pre><code>from django import forms def MonkeyPatchDjangoFormsBoundField(): def prepare_widget_render(self, widget=None, attrs=None, only_initial=False): """ Prepare the data needed for the widget rendering. """ if not widget: widget = self.field.widget attrs = attrs or {} auto_id = self.auto_id if auto_id and 'id' not in attrs and 'id' not in widget.attrs: if not only_initial: attrs['id'] = auto_id else: attrs['id'] = self.html_initial_id if not only_initial: name = self.html_name else: name = self.html_initial_name return widget, name, attrs def as_widget(self, widget=None, attrs=None, only_initial=False): """ Renders the field by rendering the passed widget, adding any HTML attributes passed as attrs. If no widget is specified, then the field's default widget will be used. """ widget, name, attrs = self.prepare_widget_render(widget, attrs, only_initial) return widget.render(name, self.value(), attrs=attrs) def __iter__(self): """ Check if current widget has a renderer and iterate renderer. """ widget, name, attrs = self.prepare_widget_render() if not hasattr(widget, 'get_renderer'): raise Exception, "Can not iterate over widget '%s'" % widget.__class__.__name__ renderer = widget.get_renderer(name, self.value(), attrs=attrs) for entry in renderer: yield entry def __getitem__(self,idx): """ Tries to use current widget's renderer, and then check attribute. """ widget, name, attrs = self.prepare_widget_render() try: renderer = widget.get_renderer(name, self.value(), attrs=attrs) return renderer[idx] except Exception: return getattr(self,idx) forms.forms.BoundField.prepare_widget_render = prepare_widget_render forms.forms.BoundField.as_widget = as_widget forms.forms.BoundField.__iter__ = __iter__ forms.forms.BoundField.__getitem__ = __getitem__ </code></pre> <p>This allowed me to be able to access the radio inputs directly, by using <code>{{ form.field.0.tag }}</code>, or through iteration - <code>{% for radio in form.field %} {{ radio.tag }} {% endfor %}</code>. Much easier to take care of!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload