form: correctly ignore empty values in WidgetList (#8866)
(it used to ignore None but we also want it to ignore '')
This commit is contained in:
parent
af16cb5948
commit
776c367f31
|
@ -877,6 +877,46 @@ def test_form_edit_field_advanced(pub):
|
|||
assert resp.body.index('<legend>Additional parameters</legend>') > \
|
||||
resp.body.index('<label for="form_data_source">Data Source</label>')
|
||||
|
||||
def test_form_edit_item_field(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [fields.ItemField(id='1', label='1st field', type='item')]
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='fields/')
|
||||
assert '1st field' in resp.body
|
||||
|
||||
resp = resp.click('Edit', href='1/')
|
||||
assert resp.forms[0]['label'].value == '1st field'
|
||||
resp.forms[0]['label'] = 'changed field'
|
||||
resp.forms[0]['required'] = False
|
||||
resp = resp.forms[0].submit('items$add_element')
|
||||
# this adds a second field
|
||||
assert 'items$element0' in resp.form.fields
|
||||
assert 'items$element1' in resp.form.fields
|
||||
# but don't fill anything
|
||||
resp = resp.forms[0].submit('submit')
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
|
||||
resp = resp.follow()
|
||||
|
||||
assert FormDef.get(1).fields[0].label == 'changed field'
|
||||
assert FormDef.get(1).fields[0].required == False
|
||||
assert FormDef.get(1).fields[0].items is None
|
||||
|
||||
# edit and fill with one item
|
||||
resp = resp.click('Edit', href='1/')
|
||||
assert resp.forms[0]['label'].value == 'changed field'
|
||||
resp.forms[0]['items$element0'] = 'XXX'
|
||||
resp = resp.forms[0].submit('submit')
|
||||
assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
|
||||
assert FormDef.get(1).fields[0].items == ['XXX']
|
||||
|
||||
def test_form_legacy_int_id(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
|
|
|
@ -1179,6 +1179,15 @@ class WidgetList(quixote.form.widget.WidgetList):
|
|||
r += self.render_hint(self.get_hint())
|
||||
return r.getvalue()
|
||||
|
||||
def _parse(self, request):
|
||||
values = []
|
||||
for name in self.element_names:
|
||||
value = self.get(name)
|
||||
if value:
|
||||
values.append(value)
|
||||
self.value = values or None
|
||||
|
||||
|
||||
class WidgetDict(quixote.form.widget.WidgetDict):
|
||||
# Fix the title and hint setting
|
||||
# FIXME: to be fixed in Quixote upstream : title and hint parameters should be removed
|
||||
|
|
Loading…
Reference in New Issue