Skip to content
Permalink
Browse files

Fixed #24788 -- Allowed Forms to specify a prefix at the class level.

  • Loading branch information...
pwmarcz authored and timgraham committed May 24, 2015
1 parent 4ccfc44 commit 4df7e8483b2679fc1cba3410f08960bac6f51115
Showing with 28 additions and 1 deletion.
  1. +3 −1 django/forms/forms.py
  2. +10 −0 docs/ref/forms/api.txt
  3. +3 −0 docs/releases/1.9.txt
  4. +12 −0 tests/forms_tests/tests/test_forms.py
@@ -75,6 +75,7 @@ class BaseForm(object):
# information. Any improvements to the form API should be made to *this*
# class, not to the Form class.
field_order = None
prefix = None

def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=None,
@@ -83,7 +84,8 @@ def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
self.data = data or {}
self.files = files or {}
self.auto_id = auto_id
self.prefix = prefix
if prefix is not None:
self.prefix = prefix
self.initial = initial or {}
self.error_class = error_class
# Translators: This is the default suffix added to form field labels
@@ -1065,3 +1065,13 @@ You can put several Django forms inside one ``<form>`` tag. To give each
>>> print(father.as_ul())
<li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li>
<li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" /></li>

The prefix can also be specified on the form class::

>>> class PersonForm(forms.Form):
... ...
... prefix = 'person'

.. versionadded:: 1.9

The ability to specify ``prefix`` on the form class was added.
@@ -161,6 +161,9 @@ Forms
:attr:`~django.forms.Form.field_order` attribute, the ``field_order``
constructor argument , or the :meth:`~django.forms.Form.order_fields` method.

* A form prefix can be specified inside a form class, not only when
instantiating a form. See :ref:`form-prefix` for details.

Generic Views
^^^^^^^^^^^^^

@@ -1671,6 +1671,18 @@ def add_prefix(self, field_name):
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))

def test_class_prefix(self):
# Prefix can be also specified at the class level.
class Person(Form):
first_name = CharField()
prefix = 'foo'

p = Person()
self.assertEqual(p.prefix, 'foo')

p = Person(prefix='bar')
self.assertEqual(p.prefix, 'bar')

def test_forms_with_null_boolean(self):
# NullBooleanField is a bit of a special case because its presentation (widget)
# is different than its data. This is handled transparently, though.

0 comments on commit 4df7e84

Please sign in to comment.
You can’t perform that action at this time.