summaryrefslogtreecommitdiff
path: root/django/forms/widgets.py
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2011-12-07 22:31:39 +0000
committerAdrian Holovaty <adrian@holovaty.com>2011-12-07 22:31:39 +0000
commitfc90c09efdfbc029d43e6d4c0952ed6b49f6f34d (patch)
treeb86bdd032d4afc93cb3135312377cf02532dc68d /django/forms/widgets.py
parent0519adb2a87090bd9ee3f61c7b9a6ff6de5fa341 (diff)
Made BoundFields iterable, so that you can iterate over individual radio buttons of a RadioSelect in a template
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17173 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/forms/widgets.py')
-rw-r--r--django/forms/widgets.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 57a6b4566a..9c04750fdb 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -156,6 +156,15 @@ class Widget(object):
memo[id(self)] = obj
return obj
+ def subwidgets(self, name, value, attrs=None, choices=()):
+ """
+ Yields all "subwidgets" of this widget. Used only by RadioSelect to
+ allow template access to individual <input type="radio"> buttons.
+
+ Arguments are the same as for render().
+ """
+ yield self
+
def render(self, name, value, attrs=None):
"""
Returns this Widget rendered as HTML, as a Unicode string.
@@ -628,6 +637,12 @@ class RadioInput(StrAndUnicode):
self.index = index
def __unicode__(self):
+ return self.render()
+
+ def render(self, name=None, value=None, attrs=None, choices=()):
+ name = name or self.name
+ value = value or self.value
+ attrs = attrs or self.attrs
if 'id' in self.attrs:
label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
else:
@@ -681,6 +696,10 @@ class RadioSelect(Select):
self.renderer = renderer
super(RadioSelect, self).__init__(*args, **kwargs)
+ def subwidgets(self, name, value, attrs=None, choices=()):
+ for widget in self.get_renderer(name, value, attrs, choices):
+ yield widget
+
def get_renderer(self, name, value, attrs=None, choices=()):
"""Returns an instance of the renderer."""
if value is None: value = ''