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