Fixed #7630 -- Slight tweak to the custom form widget exampleto avoid any

confusion. Based on a patch from Christian Tanzer.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7845 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-07-06 11:00:58 +00:00
parent 3cfa3cbd07
commit e2740dd400
1 changed files with 10 additions and 4 deletions

View File

@ -1817,15 +1817,21 @@ reuse certain sets of widget attributes over and over again. Rather than
repeat these attribute definitions every time you need them, Django allows repeat these attribute definitions every time you need them, Django allows
you to capture those definitions as a custom widget. you to capture those definitions as a custom widget.
For example, if you find that you are including a lot of comment fields on forms, For example, if you find that you are including a lot of comment fields on
you could capture the idea of a ``TextInput`` with a specific ``size`` attribute forms, you could capture the idea of a ``TextInput`` with a specific
as a custom extension to the ``TextInput`` widget:: default ``size`` attribute as a custom extension to the ``TextInput`` widget::
class CommentWidget(forms.TextInput): class CommentWidget(forms.TextInput):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
kwargs.setdefault('attrs',{}).update({'size': '40'}) attrs = kwargs.setdefault('attrs',{})
if 'size' not in attrs:
attrs['size'] = 40
super(CommentWidget, self).__init__(*args, **kwargs) super(CommentWidget, self).__init__(*args, **kwargs)
We allow the ``size`` attribute to be overridden by the user, but, by default,
this widget will behave as if ``attrs={'size': 40}`` was always passed into the
constructor.
Then you can use this widget in your forms:: Then you can use this widget in your forms::
class CommentForm(forms.Form): class CommentForm(forms.Form):