0001-blocks-reset-block-errors-when-subwidget-is-prefille.patch
tests/form_pages/test_block.py | ||
---|---|---|
412 | 412 |
resp = app.get(formdef.get_url()) |
413 | 413 |
resp.form['f1'] = 'Hello' |
414 | 414 |
resp = resp.form.submit('submit') # -> 2nd page |
415 |
assert not resp.pyquery('#form_error_f3') # not marked as error |
|
415 | 416 |
assert resp.form['f3$element0$f123'].value == 'Hello World' |
416 | 417 |
resp = resp.form.submit('submit') # -> validation page |
417 | 418 |
resp = resp.form.submit('submit') # -> end page |
wcs/blocks.py | ||
---|---|---|
284 | 284 |
# database in JSON. |
285 | 285 |
self.value['schema'] = {x.id: x.key for x in self.block.fields} |
286 | 286 | |
287 |
def unparse(self): |
|
288 |
self._parsed = False |
|
289 |
for widget in self.widgets: |
|
290 |
widget._parsed = False |
|
291 | ||
287 | 292 |
def parse(self, request=None): |
288 | 293 |
if not self._parsed: |
289 | 294 |
self._parsed = True |
wcs/forms/root.py | ||
---|---|---|
384 | 384 |
v = field.convert_value_to_str(v) |
385 | 385 |
widget.set_value(v) |
386 | 386 |
widget.transfer_form_value(req) |
387 | ||
388 |
if block: |
|
389 |
# reset parent block if subwidget has changed; this |
|
390 |
# prevents "required field" to be displayed on fields that |
|
391 |
# have just been prefilled. |
|
392 |
form.get_widget('f%s' % block.id).unparse() |
|
393 |
form.get_widget('f%s' % block.id).clear_error() |
|
394 | ||
387 | 395 |
if field.type == 'item' and v and widget.value != v: |
388 | 396 |
# mark field as invalid if the value was not accepted |
389 | 397 |
# (this is required by quixote>=3 as the value would |
390 | 398 |
# not be evaluated in the initial GET request of the |
391 | 399 |
# page). |
392 | 400 |
widget.set_error(get_selection_error_text()) |
401 | ||
393 | 402 |
if locked: |
394 | 403 |
widget.readonly = 'readonly' |
395 | 404 |
widget.attrs['readonly'] = 'readonly' |
405 | ||
396 | 406 |
had_prefill = True |
397 | 407 |
return had_prefill |
398 | 408 | |
399 |
- |