Commit cc434b30 authored by Pete Richards's avatar Pete Richards

remove not-visible fields from forms

parent 8db79a06
......@@ -25,6 +25,13 @@ class BaseRule(object):
self.rule_set = rule_set
return self
@property
def visible_fields(self):
"""
A list of visible fields for the given rule.
"""
raise NotImplementedError()
def __call__(self, form, form_opts=None, field_args={}):
"""
Render rule.
......@@ -68,6 +75,17 @@ class NestedRule(BaseRule):
self.rules = rule_set.configure_rules(self.rules, self)
return super(NestedRule, self).configure(rule_set, parent)
@property
def visible_fields(self):
"""
Return visible fields for all child rules.
"""
visible_fields = []
for rule in self.rules:
for field in rule.visible_fields:
visible_fields.append(field)
return visible_fields
def __iter__(self):
"""
Return rules.
......@@ -111,6 +129,10 @@ class Text(BaseRule):
self.text = text
self.escape = escape
@property
def visible_fields(self):
return []
def __call__(self, form, form_opts=None, field_args={}):
if self.escape:
return self.text
......@@ -168,6 +190,10 @@ class Macro(BaseRule):
return field
@property
def visible_fields(self):
return []
def __call__(self, form, form_opts=None, field_args={}):
"""
Render macro rule.
......@@ -220,6 +246,10 @@ class Container(Macro):
self.child_rule.configure(rule_set, self)
return super(Container, self).configure(rule_set, parent)
@property
def visible_fields(self):
return self.child_rule.visible_fields
def __call__(self, form, form_opts=None, field_args={}):
"""
Render container.
......@@ -258,6 +288,10 @@ class Field(Macro):
super(Field, self).__init__(render_field)
self.field_name = field_name
@property
def visible_fields(self):
return [self.field_name]
def __call__(self, form, form_opts=None, field_args={}):
"""
Render field.
......@@ -345,6 +379,14 @@ class RuleSet(object):
self.view = view
self.rules = self.configure_rules(rules)
@property
def visible_fields(self):
visible_fields = []
for rule in self.rules:
for field in rule.visible_fields:
visible_fields.append(field)
return visible_fields
def convert_string(self, value):
"""
Convert string to rule.
......
......@@ -1477,6 +1477,10 @@ class BaseModelView(BaseView, ActionsMixin):
return redirect(return_url)
form = self.create_form()
if self._form_create_rules:
for field in form:
if field.name not in self._form_create_rules.visible_fields:
form.__delitem__(field.name)
if self.validate_form(form):
if self.create_model(form):
......@@ -1514,6 +1518,10 @@ class BaseModelView(BaseView, ActionsMixin):
return redirect(return_url)
form = self.edit_form(obj=model)
if self._form_edit_rules:
for field in form:
if field.name not in self._form_edit_rules.visible_fields:
form.__delitem__(field.name)
if self.validate_form(form):
if self.update_model(form, model):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment