Provide some default readonly form field renderers
This commit is contained in:
parent
485c96fec1
commit
bfa398bee1
|
@ -286,7 +286,7 @@ class Form(object):
|
|||
"""
|
||||
|
||||
def __init__(self, fields=None, schema=None, request=None, readonly=False, readonly_fields=[],
|
||||
model_instance=None, model_class=None, nodes={}, enums={}, labels={}, renderers={},
|
||||
model_instance=None, model_class=None, nodes={}, enums={}, labels={}, renderers=None,
|
||||
widgets={}, defaults={}, validators={}, required={}, helptext={},
|
||||
action_url=None, cancel_url=None):
|
||||
|
||||
|
@ -304,6 +304,9 @@ class Form(object):
|
|||
self.nodes = nodes or {}
|
||||
self.enums = enums or {}
|
||||
self.labels = labels or {}
|
||||
if renderers is None and self.model_class:
|
||||
self.renderers = self.make_renderers()
|
||||
else:
|
||||
self.renderers = renderers or {}
|
||||
self.widgets = widgets or {}
|
||||
self.defaults = defaults or {}
|
||||
|
@ -334,6 +337,31 @@ class Form(object):
|
|||
|
||||
return fields
|
||||
|
||||
def make_renderers(self):
|
||||
"""
|
||||
Return a default set of field renderers, based on :attr:`model_class`.
|
||||
"""
|
||||
if not self.model_class:
|
||||
raise ValueError("Must define model_class to use make_renderers()")
|
||||
|
||||
mapper = orm.class_mapper(self.model_class)
|
||||
renderers = {}
|
||||
|
||||
for field in self.fields:
|
||||
if mapper.has_property(field):
|
||||
prop = mapper.get_property(field)
|
||||
if isinstance(prop, orm.ColumnProperty):
|
||||
if len(prop.columns) == 1:
|
||||
column = prop.columns[0]
|
||||
|
||||
if isinstance(column.type, sa.DateTime):
|
||||
renderers[field] = self.render_datetime
|
||||
|
||||
elif isinstance(column.type, sa.Boolean):
|
||||
renderers[field] = self.render_boolean
|
||||
|
||||
return renderers
|
||||
|
||||
def append(self, field):
|
||||
self.fields.append(field)
|
||||
|
||||
|
|
Loading…
Reference in a new issue