Fixed #23712 -- Fixed KeyError with BaseForm._html_output()
This commit is contained in:
parent
faf0d66a80
commit
3f9ec12d9c
|
@ -251,9 +251,14 @@ class BaseForm(object):
|
||||||
# that users write): if there are only top errors, we may
|
# that users write): if there are only top errors, we may
|
||||||
# not be able to conscript the last row for our purposes,
|
# not be able to conscript the last row for our purposes,
|
||||||
# so insert a new, empty row.
|
# so insert a new, empty row.
|
||||||
last_row = (normal_row % {'errors': '', 'label': '',
|
last_row = (normal_row % {
|
||||||
'field': '', 'help_text': '',
|
'errors': '',
|
||||||
'html_class_attr': html_class_attr})
|
'label': '',
|
||||||
|
'field': '',
|
||||||
|
'help_text': '',
|
||||||
|
'html_class_attr': html_class_attr,
|
||||||
|
'field_name': '',
|
||||||
|
})
|
||||||
output.append(last_row)
|
output.append(last_row)
|
||||||
output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
|
output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -2191,6 +2191,60 @@ class FormsTestCase(TestCase):
|
||||||
form = SomeForm()
|
form = SomeForm()
|
||||||
self.assertHTMLEqual(form.as_p(), '<p id="p_some_field"></p>')
|
self.assertHTMLEqual(form.as_p(), '<p id="p_some_field"></p>')
|
||||||
|
|
||||||
|
def test_field_name_with_hidden_input(self):
|
||||||
|
"""
|
||||||
|
BaseForm._html_output() should merge all the hidden input fields and
|
||||||
|
put them in the last row.
|
||||||
|
"""
|
||||||
|
class SomeForm(Form):
|
||||||
|
hidden1 = CharField(widget=HiddenInput)
|
||||||
|
custom = CharField()
|
||||||
|
hidden2 = CharField(widget=HiddenInput)
|
||||||
|
|
||||||
|
def as_p(self):
|
||||||
|
return self._html_output(
|
||||||
|
normal_row='<p%(html_class_attr)s>%(field)s %(field_name)s</p>',
|
||||||
|
error_row='%s',
|
||||||
|
row_ender='</p>',
|
||||||
|
help_text_html=' %s',
|
||||||
|
errors_on_separate_row=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
form = SomeForm()
|
||||||
|
self.assertHTMLEqual(
|
||||||
|
form.as_p(),
|
||||||
|
'<p><input id="id_custom" name="custom" type="text" /> custom'
|
||||||
|
'<input id="id_hidden1" name="hidden1" type="hidden" />'
|
||||||
|
'<input id="id_hidden2" name="hidden2" type="hidden" /></p>'
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_field_name_with_hidden_input_and_non_matching_row_ender(self):
|
||||||
|
"""
|
||||||
|
BaseForm._html_output() should merge all the hidden input fields and
|
||||||
|
put them in the last row ended with the specific row ender.
|
||||||
|
"""
|
||||||
|
class SomeForm(Form):
|
||||||
|
hidden1 = CharField(widget=HiddenInput)
|
||||||
|
custom = CharField()
|
||||||
|
hidden2 = CharField(widget=HiddenInput)
|
||||||
|
|
||||||
|
def as_p(self):
|
||||||
|
return self._html_output(
|
||||||
|
normal_row='<p%(html_class_attr)s>%(field)s %(field_name)s</p>',
|
||||||
|
error_row='%s',
|
||||||
|
row_ender='<hr/><hr/>',
|
||||||
|
help_text_html=' %s',
|
||||||
|
errors_on_separate_row=True
|
||||||
|
)
|
||||||
|
|
||||||
|
form = SomeForm()
|
||||||
|
self.assertHTMLEqual(
|
||||||
|
form.as_p(),
|
||||||
|
'<p><input id="id_custom" name="custom" type="text" /> custom</p>\n'
|
||||||
|
'<input id="id_hidden1" name="hidden1" type="hidden" />'
|
||||||
|
'<input id="id_hidden2" name="hidden2" type="hidden" /><hr/><hr/>'
|
||||||
|
)
|
||||||
|
|
||||||
def test_error_dict(self):
|
def test_error_dict(self):
|
||||||
class MyForm(Form):
|
class MyForm(Form):
|
||||||
foo = CharField()
|
foo = CharField()
|
||||||
|
|
Loading…
Reference in New Issue