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

Refactored form creation and added `form` option for ModelView. Fixes #8.

parent ea80e70e
......@@ -5,6 +5,8 @@
- Model Admin
- Ability to sort by fields that are not visible?
- List display callables
- Fields
- Verify how boolean field is rendered
- Search
- Rename init_search
- Filters
......
......@@ -120,6 +120,19 @@ class BaseModelView(BaseView):
column_filters = ('user', 'email')
"""
form = None
"""
Form class. Override if you want to use custom form for your model.
For example:
class MyForm(wtf.Form):
pass
class MyModelView(BaseModelView):
form = MyForm
"""
form_columns = None
"""
Collection of the model field names for the form. If set to `None` will
......@@ -378,13 +391,27 @@ class BaseModelView(BaseView):
"""
raise NotImplemented('Please implement scaffold_form method')
def get_form(self):
"""
Get form class.
If ``self.form`` is set, will return it and will call
``self.scaffold_form`` otherwise.
Override to implement customized behavior.
"""
if self.form is not None:
return self.form
return self.scaffold_form()
def get_create_form(self):
"""
Create form class for model creation view.
Override to implement customized behavior.
"""
return self.scaffold_form()
return self.get_form()
def get_edit_form(self):
"""
......@@ -392,7 +419,7 @@ class BaseModelView(BaseView):
Override to implement customized behavior.
"""
return self.scaffold_form()
return self.get_form()
def create_form(self, form, obj=None):
"""
......
......@@ -301,3 +301,16 @@ def test_form():
# TODO: excluded_form_columns
# TODO: form_args
pass
def test_custom_form():
app, admin = setup()
class TestForm(wtf.Form):
pass
view = MockModelView(Model, form=TestForm)
admin.add_view(view)
eq_(view._create_form_class, TestForm)
eq_(view._edit_form_class, TestForm)
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