summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Wilson Jr <gary.wilson@gmail.com>2007-11-26 02:39:48 +0000
committerGary Wilson Jr <gary.wilson@gmail.com>2007-11-26 02:39:48 +0000
commitf110da91dbfa2c9db7e6ef2082b4eb28a7741737 (patch)
treeda9d1427d81ccd8254aafb067b423cf983dc5e9d
parent183a457f5a149d7a732a5dd46c7d3f1b77f3a127 (diff)
downloaddjango-f110da91dbfa2c9db7e6ef2082b4eb28a7741737.tar.gz
Fixed #5993 -- Made `RadioSelect` easier to subclass by giving it a default `renderer` as a class attribute.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@6717 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/newforms/widgets.py8
-rw-r--r--tests/regressiontests/forms/widgets.py10
2 files changed, 15 insertions, 3 deletions
diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py
index 350b878af9..a2d5f52ff1 100644
--- a/django/newforms/widgets.py
+++ b/django/newforms/widgets.py
@@ -317,11 +317,13 @@ class RadioFieldRenderer(StrAndUnicode):
% force_unicode(w) for w in self]))
class RadioSelect(Select):
+ renderer = RadioFieldRenderer
def __init__(self, *args, **kwargs):
- self.renderer = kwargs.pop('renderer', None)
- if not self.renderer:
- self.renderer = RadioFieldRenderer
+ # Override the default renderer if we were passed one.
+ renderer = kwargs.pop('renderer', None)
+ if renderer:
+ self.renderer = renderer
super(RadioSelect, self).__init__(*args, **kwargs)
def get_renderer(self, name, value, attrs=None, choices=()):
diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py
index cb1d084631..81254a149e 100644
--- a/tests/regressiontests/forms/widgets.py
+++ b/tests/regressiontests/forms/widgets.py
@@ -663,6 +663,16 @@ You can create your own custom renderers for RadioSelect to use.
<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br />
<label><input type="radio" name="beatle" value="R" /> Ringo</label>
+Or you can use custom RadioSelect fields that use your custom renderer.
+>>> class CustomRadioSelect(RadioSelect):
+... renderer = MyRenderer
+>>> w = CustomRadioSelect()
+>>> print w.render('beatle', 'G', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<label><input type="radio" name="beatle" value="J" /> John</label><br />
+<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
+<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br />
+<label><input type="radio" name="beatle" value="R" /> Ringo</label>
+
A RadioFieldRenderer object also allows index access to individual RadioInput
objects.
>>> w = RadioSelect()