Commit cf4179ad authored by Serge S. Koval's avatar Serge S. Koval

Added ability to override form field.

parent 59cb6052
......@@ -8,8 +8,6 @@
- Verify how boolean field is rendered
- Filters
- Custom filters for date fields?
- Paginator class
- Custom CSS/JS in admin interface
- Checkboxes and mass operations
- SQLA Model Admin
- Many2Many support
......
......@@ -58,6 +58,12 @@ class AdminModelConverter(ModelConverter):
return None
def _get_field_override(self, name):
if self.view.form_overrides:
return self.view.form_overrides.get(name)
return None
def convert(self, model, mapper, prop, field_args):
kwargs = {
'validators': [],
......@@ -82,6 +88,11 @@ class AdminModelConverter(ModelConverter):
else:
kwargs['validators'].append(validators.Required())
# Override field type if necessary
override = self._get_field_override(prop.key)
if override:
return override(**kwargs)
if prop.direction.name == 'MANYTOONE':
return QuerySelectField(widget=form.ChosenSelectWidget(),
**kwargs)
......@@ -134,6 +145,11 @@ class AdminModelConverter(ModelConverter):
# Apply label
kwargs['label'] = self._get_label(prop.key, kwargs)
# Override field type if necessary
override = self._get_field_override(prop.key)
if override:
return override(**kwargs)
return super(AdminModelConverter, self).convert(model,
mapper,
prop,
......
......@@ -167,6 +167,16 @@ class BaseModelView(BaseView):
)
"""
form_overrides = None
"""
Dictionary of form column overrides.
Example::
class MyModelView(BaseModelView):
form_overrides = dict(name=wtf.FileField)
"""
# Various settings
page_size = 20
"""
......
......@@ -335,6 +335,24 @@ def test_form():
pass
def test_form_override():
app, db, admin = setup()
class Model(db.Model):
id = db.Column(db.String, primary_key=True)
test = db.Column(db.String)
db.create_all()
view1 = CustomModelView(Model, db.session, endpoint='view1')
view2 = CustomModelView(Model, db.session, endpoint='view2', form_overrides=dict(test=wtf.FileField))
admin.add_view(view1)
admin.add_view(view2)
eq_(view1._create_form_class.test.field_class, wtf.TextField)
eq_(view2._create_form_class.test.field_class, wtf.FileField)
def test_relations():
# TODO: test relations
pass
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