fix-set_value.diff
wcs/backoffice/submission.py | ||
---|---|---|
330 | 330 |
get_session().message = ('error', _('This form has already been submitted.')) |
331 | 331 |
return redirect(self.get_default_return_url()) |
332 | 332 |
filled.just_created() |
333 |
filled.data = self.formdef.get_data(form) |
|
333 |
filled.data = self.formdef.get_data(form, current_data=filled.data)
|
|
334 | 334 |
magictoken = get_request().form['magictoken'] |
335 | 335 |
computed_values = get_session().get_by_magictoken('%s-computed' % magictoken, {}) |
336 | 336 |
filled.data.update(computed_values) |
wcs/fields.py | ||
---|---|---|
606 | 606 |
return value |
607 | 607 |
return str(value) |
608 | 608 | |
609 |
def set_value(self, data, value): |
|
609 |
def set_value(self, data, value, current_data=None): |
|
610 |
old_value = data.get('%s' % self.id) |
|
610 | 611 |
data['%s' % self.id] = value |
611 | 612 |
if self.store_display_value: |
612 |
display_value = self.store_display_value(data, self.id) |
|
613 |
if current_data and value == old_value and current_data.get('%s_display' % self.id): |
|
614 |
display_value = current_data.get('%s_display' % self.id) |
|
615 |
else: |
|
616 |
display_value = self.store_display_value(data, self.id) |
|
613 | 617 |
if display_value: |
614 | 618 |
data['%s_display' % self.id] = display_value |
615 | 619 |
elif '%s_display' % self.id in data: |
616 | 620 |
del data['%s_display' % self.id] |
617 | 621 |
if self.store_structured_value and value: |
618 |
structured_value = self.store_structured_value(data, self.id) |
|
622 |
if current_data and value == old_value and current_data.get('%s_structured' % self.id): |
|
623 |
structured_value = current_data.get('%s_structured' % self.id) |
|
624 |
else: |
|
625 |
structured_value = self.store_structured_value(data, self.id) |
|
619 | 626 |
if structured_value: |
620 | 627 |
if isinstance(structured_value, dict) and structured_value.get('id'): |
621 | 628 |
# in case of list field, override id |
wcs/formdef.py | ||
---|---|---|
800 | 800 |
widget.live_condition_fields = live_condition_fields[field.varname] |
801 | 801 | |
802 | 802 |
@classmethod |
803 |
def get_field_data(cls, field, widget): |
|
803 |
def get_field_data(cls, field, widget, current_data=None):
|
|
804 | 804 |
d = {} |
805 | 805 |
d[field.id] = widget.parse() |
806 | 806 |
if d.get(field.id) is not None and field.convert_value_from_str: |
807 | 807 |
d[field.id] = field.convert_value_from_str(d[field.id]) |
808 |
field.set_value(d, d[field.id]) |
|
808 |
field.set_value(d, d[field.id], current_data=current_data)
|
|
809 | 809 |
if getattr(widget, 'cleanup', None): |
810 | 810 |
widget.cleanup() |
811 | 811 |
return d |
812 | 812 | |
813 |
def get_data(self, form): |
|
813 |
def get_data(self, form, current_data=None):
|
|
814 | 814 |
d = {} |
815 | 815 |
for field in self.fields: |
816 | 816 |
widget = form.get_widget('f%s' % field.id) |
817 | 817 |
if widget: |
818 |
d.update(self.get_field_data(field, widget)) |
|
818 |
d.update(self.get_field_data(field, widget, current_data=None))
|
|
819 | 819 |
return d |
820 | 820 | |
821 | 821 |
def export_to_json(self, include_id=False, indent=None, anonymise=True): |
wcs/forms/root.py | ||
---|---|---|
1443 | 1443 |
filled = self.get_current_draft() or self.formdef.data_class()() |
1444 | 1444 |
filled.just_created() |
1445 | 1445 | |
1446 |
filled.data = self.formdef.get_data(form) |
|
1446 |
filled.data = self.formdef.get_data(form, current_data=filled.data)
|
|
1447 | 1447 |
magictoken = get_request().form['magictoken'] |
1448 | 1448 |
computed_values = get_session().get_by_magictoken('%s-computed' % magictoken, {}) |
1449 | 1449 |
filled.data.update(computed_values) |