Перейти к содержанию

Таблицы

InfraVision использует библиотеку django-tables2 для отрисовки динамических таблиц объектов. Эти таблицы отображают списки объектов и могут быть отсортированы и отфильтрованы по различным параметрам.

NetBoxTable

Для предоставления дополнительной функциональности сверх того, что поддерживается стандартным классом Table в django-tables2, InfraVision предоставляет класс NetBoxTable. Этот пользовательский класс таблицы включает поддержку:

  • Настраиваемого пользователем отображения и порядка столбцов
  • Столбцов пользовательских полей и пользовательских ссылок
  • Автоматической предвыборки связанных объектов

Он также включает несколько столбцов по умолчанию:

  • pk — флажок для выбора объекта, связанного с каждой строкой таблицы (где применимо)
  • id — числовой ID объекта в базе данных, как гиперссылка на представление объекта (скрыт по умолчанию)
  • actions — выпадающее меню с доступными пользователю действиями для конкретного объекта

Пример

# tables.py
import django_tables2 as tables
from netbox.tables import NetBoxTable
from .models import MyModel

class MyModelTable(NetBoxTable):
    name = tables.Column(
        linkify=True
    )
    ...

    class Meta(NetBoxTable.Meta):
        model = MyModel
        fields = ('pk', 'id', 'name', ...)
        default_columns = ('pk', 'name', ...)

Конфигурация таблицы

Класс NetBoxTable имеет функцию динамической конфигурации, позволяющую пользователям изменять свои предпочтения отображения и порядка столбцов. Чтобы настроить таблицу для конкретного запроса, просто вызовите её метод configure() и передайте текущий объект HTTPRequest. Например:

table = MyModelTable(data=MyModel.objects.all())
table.configure(request)

Это автоматически применит любые пользовательские предпочтения для таблицы. (При использовании общего представления, предоставляемого InfraVision, конфигурация таблицы обрабатывается автоматически.)

Действия массового редактирования и удаления

Кнопки массового редактирования и удаления автоматически добавляются в таблицу, если есть соответствующее представление, зарегистрированное по имени пути ${modelname}_bulk_edit или ${modelname}_bulk_delete.

Столбцы

Классы столбцов таблицы, перечисленные ниже, поддерживаются для использования в плагинах. Эти классы могут быть импортированы из netbox.tables.columns.

::: netbox.tables.ArrayColumn options: members: false

::: netbox.tables.BooleanColumn options: members: false

::: netbox.tables.ChoiceFieldColumn options: members: false

::: netbox.tables.ColorColumn options: members: false

::: netbox.tables.ColoredLabelColumn options: members: false

::: netbox.tables.ContentTypeColumn options: members: false

::: netbox.tables.ContentTypesColumn options: members: false

::: netbox.tables.MarkdownColumn options: members: false

::: netbox.tables.TagColumn options: members: false

::: netbox.tables.TemplateColumn options: members: - init

Расширение базовых таблиц

Плагины могут регистрировать собственные пользовательские столбцы в базовых таблицах, используя служебную функцию register_table_column(). Это позволяет плагину добавлять дополнительную информацию, такую как связи с его собственными моделями, к встроенным спискам объектов.

import django_tables2
from django.utils.translation import gettext_lazy as _

from dcim.tables import SiteTable
from utilities.tables import register_table_column

mycol = django_tables2.Column(
    verbose_name=_('My Column'),
    accessor=django_tables2.A('description')
)

register_table_column(mycol, 'foo', SiteTable)

Обычно вы захотите определить accessor, идентифицирующий желаемое поле модели или связь при определении пользовательского столбца. См. документацию django-tables2 для получения дополнительной информации о создании пользовательских столбцов.

::: utilities.tables.register_table_column