diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2007-02-14 23:44:46 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2007-02-14 23:44:46 +0000 |
| commit | 05182053088d3c30fad3fe5cc81db7a12412ae2b (patch) | |
| tree | 65a1a38c7605bd3623aa17ad34b6086fd484626b /docs | |
| parent | 4c4209b14449554382b541d709749340f9b1a7ae (diff) | |
Implemented subclassing Forms in newforms
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4506 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/newforms.txt | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/docs/newforms.txt b/docs/newforms.txt index 063f686ed5..ff222516b3 100644 --- a/docs/newforms.txt +++ b/docs/newforms.txt @@ -571,6 +571,46 @@ is a list-like object that is displayed as an HTML ``<ul>`` when printed:: >>> str(f['subject'].errors) '' +Subclassing forms +----------------- + +If you subclass a custom ``Form`` class, the resulting ``Form`` class will +include all fields of the parent class(es), followed by the fields you define +in the subclass. + +In this example, ``ContactFormWithPriority`` contains all the fields from +``ContactForm``, plus an additional field, ``priority``. The ``ContactForm`` +fields are ordered first:: + + >>> class ContactFormWithPriority(ContactForm): + ... priority = forms.CharField() + >>> f = ContactFormWithPriority(auto_id=False) + >>> print f.as_ul() + <li>Subject: <input type="text" name="subject" maxlength="100" /></li> + <li>Message: <input type="text" name="message" /></li> + <li>Sender: <input type="text" name="sender" /></li> + <li>Cc myself: <input type="checkbox" name="cc_myself" /></li> + <li>Priority: <input type="text" name="priority" /></li> + +It's possible to subclass multiple forms, treating forms as "mix-ins." In this +example, ``BeatleForm`` subclasses both ``PersonForm`` and ``InstrumentForm`` +(in that order), and its field list includes the fields from the parent +classes:: + + >>> class PersonForm(Form): + ... first_name = CharField() + ... last_name = CharField() + >>> class InstrumentForm(Form): + ... instrument = CharField() + >>> class BeatleForm(PersonForm, InstrumentForm): + ... haircut_type = CharField() + >>> b = Beatle(auto_id=False) + >>> print b.as_ul() + <li>First name: <input type="text" name="first_name" /></li> + <li>Last name: <input type="text" name="last_name" /></li> + <li>Instrument: <input type="text" name="instrument" /></li> + <li>Haircut type: <input type="text" name="haircut_type" /></li> + Fields ====== |
