forms: handle present-but-False readonly attribute (#44090)

This commit is contained in:
Frédéric Péters 2020-06-15 15:33:52 +02:00
parent 78cb7e1cb9
commit 2c0bba5f71
2 changed files with 13 additions and 0 deletions

View File

@ -106,6 +106,15 @@ def test_stringwidget_required():
assert widget.parse() == 'bar'
def test_stringwidget_readonly():
widget = StringWidget('test', value='foo', required=True)
assert 'readonly' not in str(widget.render())
widget = StringWidget('test', value='foo', required=True, readonly=False)
assert 'readonly' not in str(widget.render())
widget = StringWidget('test', value='foo', required=True, readonly=True)
assert 'readonly="readonly"' in str(widget.render())
def test_table_list_rows():
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
form = MockHtmlForm(widget)

View File

@ -556,6 +556,10 @@ class CompositeWidget(quixote.form.CompositeWidget):
class StringWidget(quixote.form.StringWidget):
def __init__(self, name, *args, **kwargs):
if 'readonly' in kwargs and not kwargs.get('readonly'):
del kwargs['readonly']
elif 'readonly' in kwargs:
kwargs['readonly'] = 'readonly'
self.validation_function = kwargs.pop('validation_function', None)
super(StringWidget, self).__init__(name, *args, **kwargs)