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

Added ability to override form field.

parent 59cb6052
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
- Verify how boolean field is rendered - Verify how boolean field is rendered
- Filters - Filters
- Custom filters for date fields? - Custom filters for date fields?
- Paginator class
- Custom CSS/JS in admin interface
- Checkboxes and mass operations - Checkboxes and mass operations
- SQLA Model Admin - SQLA Model Admin
- Many2Many support - Many2Many support
......
...@@ -58,6 +58,12 @@ class AdminModelConverter(ModelConverter): ...@@ -58,6 +58,12 @@ class AdminModelConverter(ModelConverter):
return None 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): def convert(self, model, mapper, prop, field_args):
kwargs = { kwargs = {
'validators': [], 'validators': [],
...@@ -82,6 +88,11 @@ class AdminModelConverter(ModelConverter): ...@@ -82,6 +88,11 @@ class AdminModelConverter(ModelConverter):
else: else:
kwargs['validators'].append(validators.Required()) 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': if prop.direction.name == 'MANYTOONE':
return QuerySelectField(widget=form.ChosenSelectWidget(), return QuerySelectField(widget=form.ChosenSelectWidget(),
**kwargs) **kwargs)
...@@ -134,6 +145,11 @@ class AdminModelConverter(ModelConverter): ...@@ -134,6 +145,11 @@ class AdminModelConverter(ModelConverter):
# Apply label # Apply label
kwargs['label'] = self._get_label(prop.key, kwargs) 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, return super(AdminModelConverter, self).convert(model,
mapper, mapper,
prop, prop,
......
...@@ -167,6 +167,16 @@ class BaseModelView(BaseView): ...@@ -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 # Various settings
page_size = 20 page_size = 20
""" """
......
...@@ -335,6 +335,24 @@ def test_form(): ...@@ -335,6 +335,24 @@ def test_form():
pass 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(): def test_relations():
# TODO: test relations # TODO: test relations
pass 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