improve form validation
* don't ingore errors in optional fields * don't attempt parsing if key is not present in upload * force display of fields with errors
This commit is contained in:
parent
002827cbf4
commit
1020c9bac9
@ -90,10 +90,12 @@ class Input(ABC):
|
|||||||
return self.bootstrap_decorate(self.render_input_group(self.converter.convert_to_form(value), error))
|
return self.bootstrap_decorate(self.render_input_group(self.converter.convert_to_form(value), error))
|
||||||
|
|
||||||
def parse(self, data):
|
def parse(self, data):
|
||||||
|
if self.id in data:
|
||||||
value = self.converter.convert_from_form(data[self.id][0])
|
value = self.converter.convert_from_form(data[self.id][0])
|
||||||
if self.validator is not None:
|
if self.validator is not None:
|
||||||
self.validator.validate(self.id, value)
|
self.validator.validate(self.id, value)
|
||||||
return {self.id: value} if self.id in data else {}
|
return {self.id: value}
|
||||||
|
return {}
|
||||||
|
|
||||||
def getLabel(self):
|
def getLabel(self):
|
||||||
return self.label
|
return self.label
|
||||||
|
@ -103,8 +103,8 @@ class OptionalSection(Section):
|
|||||||
|
|
||||||
def render(self, data, errors):
|
def render(self, data, errors):
|
||||||
indexed_inputs = {input.id: input for input in self.inputs}
|
indexed_inputs = {input.id: input for input in self.inputs}
|
||||||
visible_keys = set(self.mandatory + [k for k in self.optional if k in data])
|
visible_keys = set(self.mandatory + [k for k in self.optional if k in data or k in errors])
|
||||||
optional_keys = set(k for k in self.optional if k not in data)
|
optional_keys = set(k for k in self.optional if k not in data and k not in errors)
|
||||||
self.inputs = [input for k, input in indexed_inputs.items() if k in visible_keys]
|
self.inputs = [input for k, input in indexed_inputs.items() if k in visible_keys]
|
||||||
for input in self.inputs:
|
for input in self.inputs:
|
||||||
if self._is_optional(input):
|
if self._is_optional(input):
|
||||||
@ -117,8 +117,6 @@ class OptionalSection(Section):
|
|||||||
|
|
||||||
def parse(self, data):
|
def parse(self, data):
|
||||||
data, errors = super().parse(data)
|
data, errors = super().parse(data)
|
||||||
# filter out errors for optional fields
|
|
||||||
errors = [e for e in errors if e.getKey() not in self.optional or e.getKey() in data]
|
|
||||||
# remove optional keys if they have been removed from the form by setting them to None
|
# remove optional keys if they have been removed from the form by setting them to None
|
||||||
for k in self.optional:
|
for k in self.optional:
|
||||||
if k not in data:
|
if k not in data:
|
||||||
|
Loading…
Reference in New Issue
Block a user