Commit 7fb2d6bf authored by Serge S. Koval's avatar Serge S. Koval

Merge pull request #127 from ArtemSerga/#1

Column descriptions support
parents 26b3bf70 5e0ccca8
......@@ -44,6 +44,12 @@ class AdminModelConverter(ModelConverterBase):
return self.view.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)
def _get_field_override(self, name):
form_overrides = getattr(self.view, 'form_overrides', None)
......@@ -67,6 +73,7 @@ class AdminModelConverter(ModelConverterBase):
local_column = prop.local_remote_pairs[0][0]
kwargs['label'] = self._get_label(prop.key, kwargs)
kwargs['description'] = self._get_description(prop.key, kwargs)
if local_column.nullable:
kwargs['validators'].append(validators.Optional())
......@@ -148,8 +155,10 @@ class AdminModelConverter(ModelConverterBase):
if not column.nullable and not isinstance(column.type, Boolean):
kwargs['validators'].append(validators.Required())
# Apply label
kwargs['label'] = self._get_label(prop.key, kwargs)
# Apply label and description if it isn't inline form field
if self.view.model == mapper.class_:
kwargs['label'] = self._get_label(prop.key, kwargs)
kwargs['description'] = self._get_description(prop.key, kwargs)
# Figure out default value
default = getattr(column, 'default', None)
......
......@@ -129,6 +129,19 @@ class BaseModelView(BaseView, ActionsMixin):
column_labels = dict(name='Name', last_name='Last Name')
"""
column_descriptions = None
"""
Dictionary where key is column name and
value is description for `list view` column or add/edit form field.
For example::
class MyModelView(BaseModelView):
column_descriptions = dict(
full_name='First and Last name'
)
"""
column_sortable_list = ObsoleteAttr('column_sortable_list',
'sortable_columns',
None)
......@@ -324,6 +337,9 @@ class BaseModelView(BaseView, ActionsMixin):
if self.column_type_formatters is None:
self.column_type_formatters = dict(typefmt.DEFAULT_FORMATTERS)
if self.column_descriptions is None:
self.column_descriptions = dict()
if self._filters:
self._filter_groups = []
self._filter_dict = dict()
......
......@@ -108,20 +108,26 @@
{% for c, name in list_columns %}
<th>
{% if admin_view.is_sortable(c) %}
{% if sort_column == column %}
<a href="{{ sort_url(column, True) }}">
{{ name }}
{% if sort_desc %}
<i class="icon-chevron-up"></i>
{% if sort_column == column %}
<a href="{{ sort_url(column, True) }}">
{{ name }}
{% if sort_desc %}
<i class="icon-chevron-up"></i>
{% else %}
<i class="icon-chevron-down"></i>
{% endif %}
</a>
{% else %}
<i class="icon-chevron-down"></i>
<a href="{{ sort_url(column) }}">{{ name }}</a>
{% endif %}
</a>
{% else %}
<a href="{{ sort_url(column) }}">{{ name }}</a>
{{ name }}
{% endif %}
{% else %}
{{ name }}
{% if c in admin_view.column_descriptions %}
<a class="icon-question-sign"
title="{{ admin_view.column_descriptions[c] }}"
href="#" data-role="tooltip"
></a>
{% endif %}
</th>
{% set column = column + 1 %}
......@@ -167,6 +173,7 @@
{% block tail %}
<script src="{{ url_for('admin.static', filename='js/bootstrap-datepicker.js') }}"></script>
<script src="{{ url_for('admin.static', filename='js/bootstrap-tooltip.js') }}"></script>
<script src="{{ url_for('admin.static', filename='js/form.js') }}"></script>
<script src="{{ url_for('admin.static', filename='js/filters.js') }}"></script>
......@@ -174,14 +181,17 @@
actions,
actions_confirmation) }}
{% if filter_groups is not none and filter_data is not none %}
<script language="javascript">
(function() {
var filter = new AdminFilters('#filter_form', '.field-filters',
{{ admin_view._filter_dict|tojson|safe }},
{{ filter_data|tojson|safe }},
{{ filter_types|tojson|safe }});
})();
(function($) {
$('[data-role=tooltip]').tooltip();
{% if filter_groups is not none and filter_data is not none %}
var filter = new AdminFilters(
'#filter_form', '.field-filters',
{{ admin_view._filter_dict|tojson|safe }},
{{ filter_data|tojson|safe }},
{{ filter_types|tojson|safe }}
);
{% endif %}
})(jQuery);
</script>
{% endif %}
{% endblock %}
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