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 @@ ...@@ -5,6 +5,8 @@
- Model Admin - Model Admin
- Ability to sort by fields that are not visible? - Ability to sort by fields that are not visible?
- List display callables - List display callables
- Fields
- Verify how boolean field is rendered
- Search - Search
- Rename init_search - Rename init_search
- Filters - Filters
......
...@@ -120,6 +120,19 @@ class BaseModelView(BaseView): ...@@ -120,6 +120,19 @@ class BaseModelView(BaseView):
column_filters = ('user', 'email') 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 form_columns = None
""" """
Collection of the model field names for the form. If set to `None` will Collection of the model field names for the form. If set to `None` will
...@@ -378,13 +391,27 @@ class BaseModelView(BaseView): ...@@ -378,13 +391,27 @@ class BaseModelView(BaseView):
""" """
raise NotImplemented('Please implement scaffold_form method') 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): def get_create_form(self):
""" """
Create form class for model creation view. Create form class for model creation view.
Override to implement customized behavior. Override to implement customized behavior.
""" """
return self.scaffold_form() return self.get_form()
def get_edit_form(self): def get_edit_form(self):
""" """
...@@ -392,7 +419,7 @@ class BaseModelView(BaseView): ...@@ -392,7 +419,7 @@ class BaseModelView(BaseView):
Override to implement customized behavior. Override to implement customized behavior.
""" """
return self.scaffold_form() return self.get_form()
def create_form(self, form, obj=None): def create_form(self, form, obj=None):
""" """
......
...@@ -301,3 +301,16 @@ def test_form(): ...@@ -301,3 +301,16 @@ def test_form():
# TODO: excluded_form_columns # TODO: excluded_form_columns
# TODO: form_args # TODO: form_args
pass 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