From 1f5b58342563dc7ee277efe94b9db83a90633810 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 17 Jul 2023 14:29:23 -0400 Subject: [PATCH] Introduce ArrayColumn for choice lists --- netbox/extras/tables/tables.py | 14 +++++++++----- netbox/netbox/tables/columns.py | 9 +++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index b12d4cbbb..268f2319d 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -5,7 +5,7 @@ from django.conf import settings from django.utils.translation import gettext as _ from extras.models import * -from netbox.tables import NetBoxTable, columns +from netbox.tables import ArrayColumn, NetBoxTable, columns from .template_code import * __all__ = ( @@ -66,6 +66,10 @@ class CustomFieldTable(NetBoxTable): required = columns.BooleanColumn() ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility") description = columns.MarkdownColumn() + choices = ArrayColumn( + orderable=False, + verbose_name=_('Choices') + ) is_cloneable = columns.BooleanColumn() class Meta(NetBoxTable.Meta): @@ -82,9 +86,8 @@ class CustomFieldChoiceSetTable(NetBoxTable): name = tables.Column( linkify=True ) - choices = tables.TemplateColumn( + choices = ArrayColumn( accessor=tables.A('extra_choices'), - template_code='{{ value|join:", " }}', orderable=False, verbose_name=_('Choices') ) @@ -94,12 +97,13 @@ class CustomFieldChoiceSetTable(NetBoxTable): orderable=False, verbose_name=_('Count') ) + order_alphabetically = columns.BooleanColumn() class Meta(NetBoxTable.Meta): model = CustomFieldChoiceSet fields = ( - 'pk', 'id', 'name', 'description', 'choice_count', 'choices', 'extra_choices', 'order_alphabetically', - 'created', 'last_updated', + 'pk', 'id', 'name', 'description', 'choice_count', 'choices', 'order_alphabetically', 'created', + 'last_updated', ) default_columns = ('pk', 'name', 'choice_count', 'description') diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 9ef327026..05dd396f4 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -21,6 +21,7 @@ from utilities.utils import content_type_identifier, content_type_name, get_view __all__ = ( 'ActionsColumn', + 'ArrayColumn', 'BooleanColumn', 'ChoiceFieldColumn', 'ColorColumn', @@ -591,3 +592,11 @@ class MarkdownColumn(tables.TemplateColumn): def value(self, value): return value + + +class ArrayColumn(tables.Column): + """ + List array items as a comma-separated list. + """ + def render(self, value): + return ', '.join(value)