Add "hidden" concept for form fields
i.e. include hidden fields but don't show label or other dressing
This commit is contained in:
parent
868b184069
commit
ab16ffc823
|
@ -320,10 +320,11 @@ class Form(object):
|
|||
"""
|
||||
Base class for all forms.
|
||||
"""
|
||||
update_label = "Save"
|
||||
|
||||
def __init__(self, fields=None, schema=None, request=None, readonly=False, readonly_fields=[],
|
||||
model_instance=None, model_class=None, nodes={}, enums={}, labels={}, renderers=None,
|
||||
widgets={}, defaults={}, validators={}, required={}, helptext={},
|
||||
hidden={}, widgets={}, defaults={}, validators={}, required={}, helptext={},
|
||||
action_url=None, cancel_url=None):
|
||||
|
||||
self.fields = None
|
||||
|
@ -346,6 +347,7 @@ class Form(object):
|
|||
self.renderers = self.make_renderers()
|
||||
else:
|
||||
self.renderers = renderers or {}
|
||||
self.hidden = hidden or {}
|
||||
self.widgets = widgets or {}
|
||||
self.defaults = defaults or {}
|
||||
self.validators = validators or {}
|
||||
|
@ -588,6 +590,9 @@ class Form(object):
|
|||
else:
|
||||
self.renderers[key] = renderer
|
||||
|
||||
def set_hidden(self, key, hidden=True):
|
||||
self.hidden[key] = hidden
|
||||
|
||||
def set_widget(self, key, widget):
|
||||
self.widgets[key] = widget
|
||||
|
||||
|
@ -681,6 +686,11 @@ class Form(object):
|
|||
context['render_field_readonly'] = self.render_field_readonly
|
||||
return render('/forms2/deform.mako', context)
|
||||
|
||||
def field_visible(self, field):
|
||||
if self.hidden and self.hidden.get(field):
|
||||
return False
|
||||
return True
|
||||
|
||||
def render_field_readonly(self, field_name, **kwargs):
|
||||
label = HTML.tag('label', self.get_label(field_name), for_=field_name)
|
||||
field = self.render_field_value(field_name) or ''
|
||||
|
|
|
@ -20,11 +20,8 @@ ${h.csrf_token(request)}
|
|||
% elif field in dform:
|
||||
<% field = dform[field] %>
|
||||
|
||||
## % if field.requires_label:
|
||||
% if form.field_visible(field.name):
|
||||
<div class="field-wrapper ${field.name} ${'error' if field.error else ''}">
|
||||
## % for error in field.errors:
|
||||
## <div class="field-error">${error}</div>
|
||||
## % endfor
|
||||
% if field.error:
|
||||
<div class="field-error">
|
||||
% for msg in field.error.messages():
|
||||
|
@ -61,9 +58,10 @@ ${h.csrf_token(request)}
|
|||
% endif
|
||||
% endif
|
||||
|
||||
## % else:
|
||||
## ${field.render()|n}
|
||||
## % endif
|
||||
% else:
|
||||
## hidden field
|
||||
${field.serialize()|n}
|
||||
% endif
|
||||
|
||||
% endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue