fields: add detailed field value support to block fields (#44816)
This commit is contained in:
parent
1bd794a71f
commit
96fe2e3fc7
|
@ -603,6 +603,23 @@ class WidgetField(Field):
|
|||
def get_csv_heading(self):
|
||||
return [self.label]
|
||||
|
||||
def get_value_info(self, data):
|
||||
# return the selected value and an optional dictionary that will be
|
||||
# passed to get_view_value() to provide additional details.
|
||||
value_details = {}
|
||||
if self.id not in data:
|
||||
value = None
|
||||
else:
|
||||
if self.store_display_value and ('%s_display' % self.id) in data:
|
||||
value = data['%s_display' % self.id]
|
||||
value_details['value_id'] = data[self.id]
|
||||
else:
|
||||
value = data[self.id]
|
||||
|
||||
if value is None or value == '':
|
||||
value = None
|
||||
return (value, value_details)
|
||||
|
||||
def get_view_value(self, value, **kwargs):
|
||||
return str(value) if value else ''
|
||||
|
||||
|
@ -2653,17 +2670,22 @@ class BlockField(WidgetField):
|
|||
r = TemplateIO(html=True)
|
||||
for i, row_value in enumerate(value['data']):
|
||||
for field in self.block.fields:
|
||||
if not hasattr(field, 'get_value_info'):
|
||||
# inert field
|
||||
continue
|
||||
css_classes = ['field', 'field-type-%s' % field.key]
|
||||
if field.extra_css_class:
|
||||
css_classes.append(field.extra_css_class)
|
||||
r += htmltext('<div class="%s">' % ' '.join(css_classes))
|
||||
r += htmltext('<span class="label">%s</span> ') % field.label
|
||||
sub_value = row_value.get(field.id)
|
||||
sub_value, sub_value_details = field.get_value_info(row_value)
|
||||
if sub_value is None:
|
||||
r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set')
|
||||
else:
|
||||
r += htmltext('<div class="value">')
|
||||
r += field.get_view_value(sub_value, parent_field=self, parent_field_index=i)
|
||||
kwargs = {'parent_field': self, 'parent_field_index': i}
|
||||
kwargs.update(**sub_value_details)
|
||||
r += field.get_view_value(sub_value, **kwargs)
|
||||
r += htmltext('</div>')
|
||||
r += htmltext('</div>\n')
|
||||
return r.getvalue()
|
||||
|
|
|
@ -1139,23 +1139,6 @@ class FormData(StorableObject):
|
|||
if fields is None:
|
||||
fields = self.formdef.fields
|
||||
|
||||
def get_value_info(f):
|
||||
# return the selected value and an optional dictionary that will be
|
||||
# passed to get_view_value() to provide additional details.
|
||||
value_details = {}
|
||||
if f.id not in self.data:
|
||||
value = None
|
||||
else:
|
||||
if f.store_display_value and ('%s_display' % f.id) in self.data:
|
||||
value = self.data['%s_display' % f.id]
|
||||
value_details['value_id'] = self.data[f.id]
|
||||
else:
|
||||
value = self.data[f.id]
|
||||
|
||||
if value is None or value == '':
|
||||
value = None
|
||||
return (value, value_details)
|
||||
|
||||
on_page = False
|
||||
current_page_fields = []
|
||||
pages = []
|
||||
|
@ -1181,7 +1164,7 @@ class FormData(StorableObject):
|
|||
if not f.include_in_summary_page:
|
||||
continue
|
||||
|
||||
value, value_details = get_value_info(f)
|
||||
value, value_details = f.get_value_info(self.data)
|
||||
if value is None and not (f.required and include_unset_required_fields):
|
||||
continue
|
||||
|
||||
|
|
Loading…
Reference in New Issue