forms: show correct value for item fields in blocks on validation page (#44816)

This commit is contained in:
Frédéric Péters 2020-07-12 13:58:01 +02:00
parent 96fe2e3fc7
commit ae0bb033cc
2 changed files with 10 additions and 4 deletions

View File

@ -210,7 +210,10 @@ class BlockSubWidget(CompositeWidget):
super().__init__(name, value, *args, **kwargs)
for field in self.block.fields:
if 'readonly' in kwargs:
field.add_to_view_form(form=self)
field_value = None
if value is not None:
field_value = value.get(field.id)
field.add_to_view_form(form=self, value=field_value)
else:
field.add_to_form(form=self)
if value:
@ -218,7 +221,7 @@ class BlockSubWidget(CompositeWidget):
def set_value(self, value):
for widget in self.get_widgets():
if hasattr(widget, 'set_value'):
if hasattr(widget, 'set_value') and not getattr(widget, 'secondary', False):
widget.set_value(value.get(widget.field.id))
def get_field_data(self, field, widget):

View File

@ -1561,10 +1561,13 @@ class ItemField(WidgetField):
label_value = self.get_display_value(value)
self.field_key = 'f%s' % self.id
get_request().form[self.field_key + '_label'] = label_value # :/
form.add(StringWidget, self.field_key + '_label', title = self.label,
value=label_value, readonly='readonly', size=len(label_value or '')+2)
form.get_widget(self.field_key + '_label').field = self
label_widget = form.get_widget(self.field_key + '_label')
# don't let subwidget overwrite label widget value
label_widget.secondary = True
get_request().form[label_widget.name] = label_value
label_widget.field = self
form.add(HiddenWidget, self.field_key, value=real_value)
form.get_widget(self.field_key).field = self
widget = form.get_widget(self.field_key + '_label')