From 44deef353237b5dbdefddf02cc59787f2a3757de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 6 Dec 2018 12:34:18 +0100 Subject: [PATCH 1/2] fields: add a structured form to map fields (#28639) --- wcs/fields.py | 9 +++++++++ wcs/formdata.py | 4 ++-- wcs/variables.py | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/wcs/fields.py b/wcs/fields.py index 557a9d561..0dbc79be1 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -306,6 +306,11 @@ class Field(object): def get_csv_value(self, element, **kwargs): return [] + def get_structured_value(self, data): + if not self.store_structured_value: + return None + return data.get('%s_structured' % self.id) + def get_prefill_value(self, user=None, force_string=True): # returns a tuple with two items, # 1. value[str], the value that will be used to prefill @@ -2093,6 +2098,10 @@ class MapField(WidgetField): else: return None + def get_structured_value(self, data): + return self.get_json_value(data.get(self.id)) + + register_field_class(MapField) diff --git a/wcs/formdata.py b/wcs/formdata.py index d0e5118f5..2d21487e4 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -77,8 +77,8 @@ def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False): formdata.get_url(), field.id) elif raw_value is not None: new_data['var_%s_raw' % field.varname] = raw_value - if field.store_structured_value and data is not None: - structured_value = data.get('%s_structured' % field.id) + if data is not None: + structured_value = field.get_structured_value(data) if type(structured_value) is dict: for k, v in structured_value.items(): if k in ('id', 'text'): diff --git a/wcs/variables.py b/wcs/variables.py index b3e045cdb..80b01a539 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -374,8 +374,8 @@ class LazyFieldVar(object): return getattr(self, key) except AttributeError: pass - structured_value = self.data.get('%s_structured' % self.field.id) - if not (self.field.store_structured_value and structured_value): + structured_value = self.field.get_structured_value(self.data) + if not structured_value: raise KeyError(key) if isinstance(structured_value, dict): return structured_value[key] -- 2.20.0.rc2