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*
|
# information. Any improvements to the form API should be made to *this*
|
||||||
# class, not to the Form class.
|
# class, not to the Form class.
|
||||||
field_order = None
|
field_order = None
|
||||||
|
prefix = None
|
||||||
|
|
||||||
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
|
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
|
||||||
initial=None, error_class=ErrorList, label_suffix=None,
|
initial=None, error_class=ErrorList, label_suffix=None,
|
||||||
|
@ -83,7 +84,8 @@ class BaseForm(object):
|
||||||
self.data = data or {}
|
self.data = data or {}
|
||||||
self.files = files or {}
|
self.files = files or {}
|
||||||
self.auto_id = auto_id
|
self.auto_id = auto_id
|
||||||
self.prefix = prefix
|
if prefix is not None:
|
||||||
|
self.prefix = prefix
|
||||||
self.initial = initial or {}
|
self.initial = initial or {}
|
||||||
self.error_class = error_class
|
self.error_class = error_class
|
||||||
# Translators: This is the default suffix added to form field labels
|
# 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())
|
>>> 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-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>
|
<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``
|
:attr:`~django.forms.Form.field_order` attribute, the ``field_order``
|
||||||
constructor argument , or the :meth:`~django.forms.Form.order_fields` method.
|
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
|
Generic Views
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -1671,6 +1671,18 @@ class FormsTestCase(SimpleTestCase):
|
||||||
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
|
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
|
||||||
self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
|
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):
|
def test_forms_with_null_boolean(self):
|
||||||
# NullBooleanField is a bit of a special case because its presentation (widget)
|
# NullBooleanField is a bit of a special case because its presentation (widget)
|
||||||
# is different than its data. This is handled transparently, though.
|
# is different than its data. This is handled transparently, though.
|
||||||
|
|
Loading…
Reference in New Issue