feat(tables): Add ContactsColumnMixin to multiple tables

Integrate `ContactsColumnMixin` into various IPAM and VPN tables to
improve contact management. Updates table fields to include `contacts`.

Fixes #20700
This commit is contained in:
Martin Hauser 2025-10-28 16:21:23 +01:00 committed by Jeremy Stretch
parent afc62b6ffd
commit d6f756d315
4 changed files with 22 additions and 20 deletions

View File

@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
__all__ = ( __all__ = (
'ASNTable', 'ASNTable',
@ -36,7 +36,7 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description') default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description')
class ASNTable(TenancyColumnsMixin, NetBoxTable): class ASNTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
asn = tables.Column( asn = tables.Column(
verbose_name=_('ASN'), verbose_name=_('ASN'),
linkify=True linkify=True
@ -76,7 +76,7 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable):
model = ASN model = ASN
fields = ( fields = (
'pk', 'asn', 'asn_asdot', 'rir', 'site_count', 'provider_count', 'tenant', 'tenant_group', 'description', 'pk', 'asn', 'asn_asdot', 'rir', 'site_count', 'provider_count', 'tenant', 'tenant_group', 'description',
'comments', 'sites', 'tags', 'created', 'last_updated', 'actions', 'contacts', 'comments', 'sites', 'tags', 'created', 'last_updated', 'actions',
) )
default_columns = ( default_columns = (
'pk', 'asn', 'rir', 'site_count', 'provider_count', 'sites', 'description', 'tenant', 'pk', 'asn', 'rir', 'site_count', 'provider_count', 'sites', 'description', 'tenant',

View File

@ -1,6 +1,6 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from ipam.models import * from ipam.models import *
@ -58,7 +58,7 @@ class RIRTable(NetBoxTable):
# Aggregates # Aggregates
# #
class AggregateTable(TenancyColumnsMixin, NetBoxTable): class AggregateTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
prefix = tables.Column( prefix = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Aggregate'), verbose_name=_('Aggregate'),
@ -93,7 +93,7 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
model = Aggregate model = Aggregate
fields = ( fields = (
'pk', 'id', 'prefix', 'rir', 'tenant', 'tenant_group', 'child_count', 'utilization', 'date_added', 'pk', 'id', 'prefix', 'rir', 'tenant', 'tenant_group', 'child_count', 'utilization', 'date_added',
'description', 'comments', 'tags', 'created', 'last_updated', 'description', 'contacts', 'comments', 'tags', 'created', 'last_updated',
) )
default_columns = ('pk', 'prefix', 'rir', 'tenant', 'child_count', 'utilization', 'date_added', 'description') default_columns = ('pk', 'prefix', 'rir', 'tenant', 'child_count', 'utilization', 'date_added', 'description')
@ -154,7 +154,7 @@ class PrefixUtilizationColumn(columns.UtilizationColumn):
""" """
class PrefixTable(TenancyColumnsMixin, NetBoxTable): class PrefixTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
prefix = columns.TemplateColumn( prefix = columns.TemplateColumn(
verbose_name=_('Prefix'), verbose_name=_('Prefix'),
template_code=PREFIX_LINK_WITH_DEPTH, template_code=PREFIX_LINK_WITH_DEPTH,
@ -237,8 +237,8 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
model = Prefix model = Prefix
fields = ( fields = (
'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group', 'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group',
'scope', 'scope_type', 'vlan_group', 'vlan', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'scope', 'scope_type', 'vlan_group', 'vlan', 'role', 'is_pool', 'mark_utilized', 'description', 'contacts',
'tags', 'created', 'last_updated', 'comments', 'tags', 'created', 'last_updated',
) )
default_columns = ( default_columns = (
'pk', 'prefix', 'status', 'children', 'vrf', 'utilization', 'tenant', 'scope', 'vlan', 'role', 'pk', 'prefix', 'status', 'children', 'vrf', 'utilization', 'tenant', 'scope', 'vlan', 'role',
@ -252,7 +252,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
# #
# IP ranges # IP ranges
# #
class IPRangeTable(TenancyColumnsMixin, NetBoxTable): class IPRangeTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
start_address = tables.Column( start_address = tables.Column(
verbose_name=_('Start address'), verbose_name=_('Start address'),
linkify=True linkify=True
@ -293,8 +293,8 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
model = IPRange model = IPRange
fields = ( fields = (
'pk', 'id', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'tenant_group', 'pk', 'id', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'tenant_group',
'mark_populated', 'mark_utilized', 'utilization', 'description', 'comments', 'tags', 'created', 'mark_populated', 'mark_utilized', 'utilization', 'description', 'contacts', 'comments', 'tags',
'last_updated', 'created', 'last_updated',
) )
default_columns = ( default_columns = (
'pk', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'description', 'pk', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'description',

View File

@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from vpn.models import L2VPN, L2VPNTermination from vpn.models import L2VPN, L2VPNTermination
__all__ = ( __all__ = (
@ -17,7 +17,7 @@ L2VPN_TARGETS = """
""" """
class L2VPNTable(TenancyColumnsMixin, NetBoxTable): class L2VPNTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
pk = columns.ToggleColumn() pk = columns.ToggleColumn()
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
@ -47,7 +47,7 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
model = L2VPN model = L2VPN
fields = ( fields = (
'pk', 'name', 'slug', 'status', 'identifier', 'type', 'import_targets', 'export_targets', 'tenant', 'pk', 'name', 'slug', 'status', 'identifier', 'type', 'import_targets', 'export_targets', 'tenant',
'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated', 'tenant_group', 'description', 'contacts', 'comments', 'tags', 'created', 'last_updated',
) )
default_columns = ('pk', 'name', 'status', 'identifier', 'type', 'description') default_columns = ('pk', 'name', 'status', 'identifier', 'type', 'description')

View File

@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from vpn.models import * from vpn.models import *
__all__ = ( __all__ = (
@ -13,7 +13,7 @@ __all__ = (
) )
class TunnelGroupTable(NetBoxTable): class TunnelGroupTable(ContactsColumnMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@ -30,12 +30,13 @@ class TunnelGroupTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = TunnelGroup model = TunnelGroup
fields = ( fields = (
'pk', 'id', 'name', 'tunnel_count', 'description', 'slug', 'tags', 'actions', 'created', 'last_updated', 'pk', 'id', 'name', 'tunnel_count', 'description', 'slug', 'contacts', 'tags', 'actions',
'created', 'last_updated',
) )
default_columns = ('pk', 'name', 'tunnel_count', 'description') default_columns = ('pk', 'name', 'tunnel_count', 'description')
class TunnelTable(TenancyColumnsMixin, NetBoxTable): class TunnelTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@ -68,7 +69,8 @@ class TunnelTable(TenancyColumnsMixin, NetBoxTable):
model = Tunnel model = Tunnel
fields = ( fields = (
'pk', 'id', 'name', 'group', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tenant_group', 'pk', 'id', 'name', 'group', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tenant_group',
'tunnel_id', 'termination_count', 'description', 'comments', 'tags', 'created', 'last_updated', 'tunnel_id', 'termination_count', 'description', 'contacts', 'comments', 'tags', 'created',
'last_updated',
) )
default_columns = ('pk', 'name', 'group', 'status', 'encapsulation', 'tenant', 'terminations_count') default_columns = ('pk', 'name', 'group', 'status', 'encapsulation', 'tenant', 'terminations_count')