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:
Frédéric Péters 2015-11-04 16:58:16 +01:00
parent af16cb5948
commit 776c367f31
2 changed files with 49 additions and 0 deletions

View File

@ -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()

View File

@ -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