Introduce ArrayColumn for choice lists

This commit is contained in:
Jeremy Stretch 2023-07-17 14:29:23 -04:00
parent 9aff7e7103
commit 1f5b583425
2 changed files with 18 additions and 5 deletions

View File

@ -5,7 +5,7 @@ from django.conf import settings
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from extras.models import * from extras.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import ArrayColumn, NetBoxTable, columns
from .template_code import * from .template_code import *
__all__ = ( __all__ = (
@ -66,6 +66,10 @@ class CustomFieldTable(NetBoxTable):
required = columns.BooleanColumn() required = columns.BooleanColumn()
ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility") ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility")
description = columns.MarkdownColumn() description = columns.MarkdownColumn()
choices = ArrayColumn(
orderable=False,
verbose_name=_('Choices')
)
is_cloneable = columns.BooleanColumn() is_cloneable = columns.BooleanColumn()
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
@ -82,9 +86,8 @@ class CustomFieldChoiceSetTable(NetBoxTable):
name = tables.Column( name = tables.Column(
linkify=True linkify=True
) )
choices = tables.TemplateColumn( choices = ArrayColumn(
accessor=tables.A('extra_choices'), accessor=tables.A('extra_choices'),
template_code='{{ value|join:", " }}',
orderable=False, orderable=False,
verbose_name=_('Choices') verbose_name=_('Choices')
) )
@ -94,12 +97,13 @@ class CustomFieldChoiceSetTable(NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Count') verbose_name=_('Count')
) )
order_alphabetically = columns.BooleanColumn()
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomFieldChoiceSet model = CustomFieldChoiceSet
fields = ( fields = (
'pk', 'id', 'name', 'description', 'choice_count', 'choices', 'extra_choices', 'order_alphabetically', 'pk', 'id', 'name', 'description', 'choice_count', 'choices', 'order_alphabetically', 'created',
'created', 'last_updated', 'last_updated',
) )
default_columns = ('pk', 'name', 'choice_count', 'description') default_columns = ('pk', 'name', 'choice_count', 'description')

View File

@ -21,6 +21,7 @@ from utilities.utils import content_type_identifier, content_type_name, get_view
__all__ = ( __all__ = (
'ActionsColumn', 'ActionsColumn',
'ArrayColumn',
'BooleanColumn', 'BooleanColumn',
'ChoiceFieldColumn', 'ChoiceFieldColumn',
'ColorColumn', 'ColorColumn',
@ -591,3 +592,11 @@ class MarkdownColumn(tables.TemplateColumn):
def value(self, value): def value(self, value):
return value return value
class ArrayColumn(tables.Column):
"""
List array items as a comma-separated list.
"""
def render(self, value):
return ', '.join(value)