Таблицы
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