fields: make sure item fields are stored as strings (#50102)

This commit is contained in:
Frédéric Péters 2021-01-13 12:42:17 +01:00
parent 2691f4c80c
commit d2aff90e9a
2 changed files with 40 additions and 0 deletions

View File

@ -4698,6 +4698,41 @@ def test_set_backoffice_field_boolean(two_pubs):
formdata.store()
def test_set_backoffice_field_str_time_filter(two_pubs):
Workflow.wipe()
FormDef.wipe()
wf = Workflow(name='xxx')
wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
st1 = wf.add_status('Status1')
wf.backoffice_fields_formdef.fields = [
StringField(id='bo1', label='1st backoffice field',
type='str', varname='backoffice_str'),
]
wf.store()
formdef = FormDef()
formdef.name = 'baz'
formdef.fields = [StringField(id='1', label='field', type='str', varname='foo')]
formdef.workflow_id = wf.id
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'1': '09:00'}
formdata.just_created()
formdata.store()
get_publisher().substitutions.feed(formdata)
for tmpl in ('{{ form_var_foo|time:"H:i:s" }}', '{{ form_var_foo|time }}'):
item = SetBackofficeFieldsWorkflowStatusItem()
item.parent = st1
item.fields = [{'field_id': 'bo1', 'value': tmpl}]
item.perform(formdata)
formdata = formdef.data_class().get(formdata.id)
assert formdata.data['bo1'] == '09:00:00'
formdata.data['bo1'] = None
formdata.store()
def test_set_backoffice_field_block(two_pubs, blocks_feature):
BlockDef.wipe()
Workflow.wipe()

View File

@ -1677,6 +1677,11 @@ class ItemField(WidgetField, MapOptionsMixin):
return
return value
def convert_value_from_anything(self, value):
if value is None:
return None
return str(value)
def convert_value_from_str(self, value):
# caller should also call store_display_value and store_structured_value
return value