fields: add support for converting date value to string field (#58316)
This commit is contained in:
parent
949d9ecfbb
commit
b104b43dee
|
@ -5039,6 +5039,37 @@ def test_form_page_profile_verified_date_prefill(pub):
|
|||
assert time.strftime('%Y-%m-%d', formdatas[0].data['0']) == '2018-09-27'
|
||||
|
||||
|
||||
def test_form_page_profile_date_as_locked_string_prefill(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
from wcs.admin.settings import UserFieldsFormDef
|
||||
|
||||
user_formdef = UserFieldsFormDef(pub)
|
||||
user_formdef.fields.append(fields.DateField(id='_date', label='date', type='date'))
|
||||
user_formdef.store()
|
||||
user.form_data = {'_date': time.strptime('2018-09-27', '%Y-%m-%d')}
|
||||
user.set_attributes_from_formdata(user.form_data)
|
||||
user.store()
|
||||
|
||||
formdef = create_formdef()
|
||||
formdef.data_class().wipe()
|
||||
formdef.fields = [
|
||||
fields.PageField(id='1', label='1st page', type='page'),
|
||||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
fields.StringField(id='0', label='date', prefill={'type': 'user', 'value': '_date', 'locked': True}),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
|
||||
resp = resp.form.submit('submit') # -> second page
|
||||
assert resp.form['f0'].value == '2018-09-27'
|
||||
assert 'readonly' in resp.form['f0'].attrs
|
||||
resp.form['f0'].value = '2015-09-27'
|
||||
resp = resp.form.submit('submit')
|
||||
assert 'Check values then click submit.' in resp.text
|
||||
assert resp.form['f0'].value == '2018-09-27'
|
||||
|
||||
|
||||
def test_form_page_profile_verified_radio_item_prefill(pub):
|
||||
user = create_user(pub)
|
||||
formdef = create_formdef()
|
||||
|
|
|
@ -253,6 +253,7 @@ class Field:
|
|||
allow_complex = False
|
||||
display_locations = []
|
||||
prefill = None
|
||||
keep_raw_value = True
|
||||
store_display_value = None
|
||||
store_structured_value = None
|
||||
get_opendocument_node_value = None
|
||||
|
@ -1022,6 +1023,7 @@ class StringField(WidgetField):
|
|||
extra_attributes = ['size']
|
||||
validation = {}
|
||||
data_source = {}
|
||||
keep_raw_value = False
|
||||
|
||||
def perform_more_widget_changes(self, form, kwargs, edit=True):
|
||||
if self.data_source:
|
||||
|
@ -1088,6 +1090,13 @@ class StringField(WidgetField):
|
|||
def convert_value_from_str(self, value):
|
||||
return value
|
||||
|
||||
def convert_value_to_str(self, value):
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, (time.struct_time, datetime.date)):
|
||||
return strftime(date_format(), value)
|
||||
return str(value)
|
||||
|
||||
@classmethod
|
||||
def convert_value_from_anything(cls, value):
|
||||
if value is None:
|
||||
|
|
|
@ -41,7 +41,7 @@ def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
|
|||
raw_value = None
|
||||
if data is not None:
|
||||
value = data.get(field.id)
|
||||
if field.convert_value_to_str:
|
||||
if field.convert_value_to_str and field.keep_raw_value:
|
||||
raw_value = value
|
||||
value = field.convert_value_to_str(value)
|
||||
display_value = data.get('%s_display' % field.id)
|
||||
|
|
Loading…
Reference in New Issue