Flask Admin: отформатируйте способ отображения отношений - PullRequest
0 голосов
/ 16 февраля 2019

Я хотел бы изменить способ отображения отношений в представлении индекса Flask-Admin модели.У меня есть две модели, связанные через отношение «многие ко многим», которые также отображаются в представлении индекса администратора.К сожалению, отношения просто разделяются запятой, поэтому пользователь может быстро потерять обзор.В идеале я хотел бы преобразовать записи отношений в простой список (например, с помощью li в HTML).

Есть ли простой способ добиться этого?

Большое спасибо!

1 Ответ

0 голосов
/ 16 февраля 2019

Хорошо ... Я понял это сам: вы можете манипулировать способом визуализации данных, переписав функцию _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
...