Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #12074 -- Adding .as_p and as_ul methods to FormSet. Thanks art…

…hurdebert and dpn for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14250 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit c5df329996ca4801b0d97d4a70bc1bea6b8663c4 1 parent 59952b6
@HonzaKral HonzaKral authored
View
10 django/forms/formsets.py
@@ -326,6 +326,16 @@ def as_table(self):
forms = u' '.join([form.as_table() for form in self.forms])
return mark_safe(u'\n'.join([unicode(self.management_form), forms]))
+ def as_p(self):
+ "Returns this formset rendered as HTML <p>s."
+ forms = u' '.join([form.as_p() for form in self.forms])
+ return mark_safe(u'\n'.join([unicode(self.management_form), forms]))
+
+ def as_ul(self):
+ "Returns this formset rendered as HTML <li>s."
+ forms = u' '.join([form.as_ul() for form in self.forms])
+ return mark_safe(u'\n'.join([unicode(self.management_form), forms]))
+
def formset_factory(form, formset=BaseFormSet, extra=1, can_order=False,
can_delete=False, max_num=None):
"""Return a FormSet for the given form class."""
View
38 tests/regressiontests/forms/formsets.py
@@ -1,4 +1,8 @@
# -*- coding: utf-8 -*-
+from django.test.testcases import TestCase
+from django.forms.forms import Form
+from django.forms.fields import CharField, IntegerField
+from django.forms.formsets import formset_factory
tests = """
# Basic FormSet creation and usage ############################################
@@ -722,3 +726,37 @@
<ul class="errorlist"><li>You may only specify a drink once.</li></ul>
"""
+
+data = {
+ 'choices-TOTAL_FORMS': '1', # the number of forms rendered
+ 'choices-INITIAL_FORMS': '0', # the number of forms with initial data
+ 'choices-MAX_NUM_FORMS': '0', # max number of forms
+ 'choices-0-choice': 'Calexico',
+ 'choices-0-votes': '100',
+}
+
+class Choice(Form):
+ choice = CharField()
+ votes = IntegerField()
+
+ChoiceFormSet = formset_factory(Choice)
+
+class FormsetAsFooTests(TestCase):
+ def test_as_table(self):
+ formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
+ self.assertEqual(formset.as_table(),"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" /><input type="hidden" name="choices-INITIAL_FORMS" value="0" /><input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
+<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" value="Calexico" /></td></tr>
+<tr><th>Votes:</th><td><input type="text" name="choices-0-votes" value="100" /></td></tr>""")
+
+ def test_as_p(self):
+ formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
+ self.assertEqual(formset.as_p(),"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" /><input type="hidden" name="choices-INITIAL_FORMS" value="0" /><input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
+<p>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></p>
+<p>Votes: <input type="text" name="choices-0-votes" value="100" /></p>""")
+
+ def test_as_ul(self):
+ formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
+ self.assertEqual(formset.as_ul(),"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" /><input type="hidden" name="choices-INITIAL_FORMS" value="0" /><input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
+<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
+<li>Votes: <input type="text" name="choices-0-votes" value="100" /></li>""")
+
View
2  tests/regressiontests/forms/tests.py
@@ -38,6 +38,8 @@
from formsets import tests as formset_tests
from media import media_tests
+
+from formsets import FormsetAsFooTests
from fields import FieldsTests
from validators import TestFieldWithValidators
from widgets import WidgetTests, ClearableFileInputTests
Please sign in to comment.
Something went wrong with that request. Please try again.