Fixed #24788 -- Allowed Forms to specify a prefix at the class level.
This commit is contained in:
parent
4ccfc4439a
commit
4df7e8483b
|
@ -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 @@ class BaseForm(object):
|
|||
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 @@ class FormsTestCase(SimpleTestCase):
|
|||
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.
|
||||
|
|
Loading…
Reference in New Issue