Flask Admin:设置关系的显示方式

时间:2019-02-16 10:09:42

标签: python flask flask-sqlalchemy flask-admin

我想更改关系在模型的Flask-Admin Index视图中的显示方式。我确实有两个通过多对多关系连接的模型,这些模型也显示在admin索引视图中。不幸的是,这些关系只是使用逗号分隔,因此用户可能会很快失去概览。理想情况下,我想将关系条目转换为简单列表(例如,像在HTML中使用li一样)。

有没有简单的方法可以实现这一目标?

非常感谢!

2 个答案:

答案 0 :(得分:0)

好吧...我自己弄清楚了:您可以通过覆盖函数_get_list_value()来操纵呈现数据的方式。参见下面的代码

    def _get_list_value(self, context, model, name, column_formatters,
                    column_type_formatters):
    """
        Returns the value to be displayed.

        :param context:
            :py:class:`jinja2.runtime.Context` if available
        :param model:
            Model instance
        :param name:
            Field name
        :param column_formatters:
            column_formatters to be used.
        :param column_type_formatters:
            column_type_formatters to be used.
    """
    column_fmt = column_formatters.get(name)
    if column_fmt is not None:
        value = column_fmt(self, context, model, name)
    else:
        value = self._get_field_value(model, name)

    choices_map = self._column_choices_map.get(name, {})
    if choices_map:
        return choices_map.get(value) or value

    type_fmt = None
    for typeobj, formatter in column_type_formatters.items():
        if isinstance(value, typeobj):
            type_fmt = formatter
            break
    if type_fmt is not None:
        value = type_fmt(self, value)

    ### overwritten here

    if name == 'items':

        html_string  = '<ul>'
        for item in value.split(','):
            html_string += '<li> {} </li>'.format(item)
        html_string += '</ul>'
        value = Markup(html_string)


    return value

答案 1 :(得分:0)

您可以使用<br>标签作为分隔符,而不是逗号。 参见column_type_formatters

定义默认格式化程序并更新列表类型。

def lineby_list_formatter(view, values):
    html = u'<br/> '.join(str(v) for v in values)
    return Markup(html)


MY_DEFAULT_FORMATTERS = dict(typefmt.BASE_FORMATTERS)
MY_DEFAULT_FORMATTERS.update({
    list: lineby_list_formatter
})


class EventView(ModelView):
    ...
    column_type_formatters = MY_DEFAULT_FORMATTERS