Commit 4df7e848 authored by Paweł Marczewski's avatar Paweł Marczewski Committed by Tim Graham
Browse files

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

parent 4ccfc443
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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,6 +84,7 @@ class BaseForm(object):
        self.data = data or {}
        self.files = files or {}
        self.auto_id = auto_id
        if prefix is not None:
            self.prefix = prefix
        self.initial = initial or {}
        self.error_class = error_class
+10 −0
Original line number Diff line number Diff line
@@ -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.
+3 −0
Original line number Diff line number Diff line
@@ -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
^^^^^^^^^^^^^

+12 −0
Original line number Diff line number Diff line
@@ -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.