Commit 5e5b5736 authored by Serge S. Koval's avatar Serge S. Koval

Improved inline model handling for SQLa backend

parent 4783dc9b
......@@ -6,6 +6,7 @@ from flask.ext.admin.form import Select2Field
from flask.ext.admin.model.form import (converts, ModelConverterBase,
InlineFormAdmin, InlineModelConverterBase,
FieldPlaceholder)
from flask.ext.admin.model.helpers import prettify_name
from flask.ext.admin._backwards import get_property
from flask.ext.admin._compat import iteritems
......@@ -45,13 +46,20 @@ class AdminModelConverter(ModelConverterBase):
if column_labels:
return column_labels.get(name)
return self.view.prettify_name(name)
prettify_override = getattr(self.view, 'prettify_name', None)
if prettify_override:
return prettify_override(name)
return prettify_name(name)
def _get_description(self, name, field_args):
if 'description' in field_args:
return field_args['description']
if self.view.column_descriptions:
return self.view.column_descriptions.get(name)
column_descriptions = getattr(self.view, 'column_descriptions', None)
if column_descriptions:
return column_descriptions.get(name)
def _get_field_override(self, name):
form_overrides = getattr(self.view, 'form_overrides', None)
......@@ -409,9 +417,10 @@ class InlineModelConverter(InlineModelConverterBase):
you can create your own wtforms field and use it instead
"""
def __init__(self, session, view):
def __init__(self, session, view, model_converter):
super(InlineModelConverter, self).__init__(view)
self.session = session
self.model_converter = model_converter
def get_info(self, p):
info = super(InlineModelConverter, self).get_info(p)
......@@ -437,7 +446,7 @@ class InlineModelConverter(InlineModelConverterBase):
return info
def contribute(self, converter, model, form_class, inline_model):
def contribute(self, model, form_class, inline_model):
"""
Generate form fields for inline forms and contribute them to
the `form_class`
......@@ -497,6 +506,9 @@ class InlineModelConverter(InlineModelConverterBase):
else:
exclude = ignore
# Create converter
converter = self.model_converter(self.session, info)
# Create form
child_form = info.get_form()
......
......@@ -530,12 +530,12 @@ class ModelView(BaseModelView):
:param form_class:
Form class
"""
converter = self.model_form_converter(self.session, self)
inline_converter = self.inline_model_form_converter(self.session, self)
inline_converter = self.inline_model_form_converter(self.session,
self,
self.model_form_converter)
for m in self.inline_models:
form_class = inline_converter.contribute(converter,
self.model,
form_class = inline_converter.contribute(self.model,
form_class,
m)
......
......@@ -13,6 +13,7 @@ from flask.ext.admin.helpers import get_form_data, validate_form_on_submit
from flask.ext.admin.tools import rec_getattr
from flask.ext.admin._backwards import ObsoleteAttr
from flask.ext.admin._compat import iteritems, as_unicode
from .helpers import prettify_name
class BaseModelView(BaseView, ActionsMixin):
......@@ -380,7 +381,7 @@ class BaseModelView(BaseView, ActionsMixin):
# If name not provided, it is model name
if name is None:
name = '%s' % self._prettify_name(model.__name__)
name = '%s' % self.prettify_name(model.__name__)
# If endpoint not provided, it is model name + 'view'
if endpoint is None:
......@@ -818,7 +819,7 @@ class BaseModelView(BaseView, ActionsMixin):
:param name:
Name to prettify
"""
return name.replace('_', ' ').title()
return prettify_name(name)
# URL generation helper
def _get_extra_args(self):
......
def prettify_name(name):
"""
Prettify pythonic variable name.
For example, 'hello_world' will be converted to 'Hello World'
:param name:
Name to prettify
"""
return name.replace('_', ' ').title()
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