1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Introduce TenantColumn to simplify representation

This commit is contained in:
Jeremy Stretch
2021-03-04 16:07:55 -05:00
parent 23b58ccbe8
commit 20a85c1ef2
7 changed files with 48 additions and 77 deletions

View File

@ -1,7 +1,7 @@
import django_tables2 as tables
from django_tables2.utils import Accessor
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, TagColumn, ToggleColumn
from .models import Circuit, CircuitType, Provider
@ -60,9 +60,7 @@ class CircuitTable(BaseTable):
linkify=True
)
status = ChoiceFieldColumn()
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
a_side = tables.Column(
verbose_name='A Side'
)

View File

@ -5,7 +5,7 @@ from dcim.models import (
ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceRole, FrontPort, Interface, InventoryItem, Platform,
PowerOutlet, PowerPort, RearPort, VirtualChassis,
)
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import (
BaseTable, BooleanColumn, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ColoredLabelColumn, LinkedCountColumn,
TagColumn, ToggleColumn,
@ -109,9 +109,7 @@ class DeviceTable(BaseTable):
template_code=DEVICE_LINK
)
status = ChoiceFieldColumn()
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
site = tables.Column(
linkify=True
)
@ -178,9 +176,7 @@ class DeviceImportTable(BaseTable):
template_code=DEVICE_LINK
)
status = ChoiceFieldColumn()
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
site = tables.Column(
linkify=True
)

View File

@ -2,7 +2,7 @@ import django_tables2 as tables
from django_tables2.utils import Accessor
from dcim.models import Rack, Location, RackReservation, RackRole
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import (
BaseTable, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ColoredLabelColumn, LinkedCountColumn, TagColumn,
ToggleColumn,
@ -79,9 +79,7 @@ class RackTable(BaseTable):
site = tables.Column(
linkify=True
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
status = ChoiceFieldColumn()
role = ColoredLabelColumn()
u_height = tables.TemplateColumn(
@ -143,9 +141,7 @@ class RackReservationTable(BaseTable):
accessor=Accessor('rack__site'),
linkify=True
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
rack = tables.Column(
linkify=True
)

View File

@ -1,7 +1,7 @@
import django_tables2 as tables
from dcim.models import Region, Site
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, TagColumn, ToggleColumn
from .template_code import MPTT_LINK
@ -46,9 +46,7 @@ class SiteTable(BaseTable):
region = tables.Column(
linkify=True
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
tags = TagColumn(
url_name='dcim:site_list'
)

View File

@ -3,7 +3,7 @@ from django.utils.safestring import mark_safe
from django_tables2.utils import Accessor
from dcim.models import Interface
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import (
BaseTable, BooleanColumn, ButtonsColumn, ChoiceFieldColumn, LinkedCountColumn, TagColumn, ToggleColumn,
)
@ -109,16 +109,6 @@ VLAN_MEMBER_TAGGED = """
{% endif %}
"""
TENANT_LINK = """
{% if record.tenant %}
<a href="{{ record.tenant.get_absolute_url }}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
{% elif record.vrf.tenant %}
<a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
{% else %}
&mdash;
{% endif %}
"""
#
# VRFs
@ -130,9 +120,7 @@ class VRFTable(BaseTable):
rd = tables.Column(
verbose_name='RD'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
enforce_unique = BooleanColumn(
verbose_name='Unique'
)
@ -163,9 +151,7 @@ class VRFTable(BaseTable):
class RouteTargetTable(BaseTable):
pk = ToggleColumn()
name = tables.LinkColumn()
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
tags = TagColumn(
url_name='ipam:vrf_list'
)
@ -208,9 +194,7 @@ class AggregateTable(BaseTable):
prefix = tables.LinkColumn(
verbose_name='Aggregate'
)
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
tenant = TenantColumn()
date_added = tables.DateColumn(
format="Y-m-d",
verbose_name='Added'
@ -279,9 +263,7 @@ class PrefixTable(BaseTable):
template_code=VRF_LINK,
verbose_name='VRF'
)
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
tenant = TenantColumn()
site = tables.Column(
linkify=True
)
@ -312,9 +294,7 @@ class PrefixDetailTable(PrefixTable):
template_code=UTILIZATION_GRAPH,
orderable=False
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
tags = TagColumn(
url_name='ipam:prefix_list'
)
@ -347,9 +327,7 @@ class IPAddressTable(BaseTable):
default=AVAILABLE_LABEL
)
role = ChoiceFieldColumn()
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
tenant = TenantColumn()
assigned_object = tables.Column(
linkify=True,
orderable=False,
@ -379,9 +357,7 @@ class IPAddressDetailTable(IPAddressTable):
orderable=False,
verbose_name='NAT (Inside)'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
assigned = BooleanColumn(
accessor='assigned_object_id',
verbose_name='Assigned'
@ -428,9 +404,7 @@ class InterfaceIPAddressTable(BaseTable):
verbose_name='VRF'
)
status = ChoiceFieldColumn()
tenant = tables.TemplateColumn(
template_code=TENANT_LINK
)
tenant = TenantColumn()
class Meta(BaseTable.Meta):
model = IPAddress
@ -480,9 +454,7 @@ class VLANTable(BaseTable):
viewname='ipam:vlangroup_vlans',
args=[Accessor('group__pk')]
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
status = ChoiceFieldColumn(
default=AVAILABLE_LABEL
)
@ -504,9 +476,7 @@ class VLANDetailTable(VLANTable):
orderable=False,
verbose_name='Prefixes'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
tags = TagColumn(
url_name='ipam:vlan_list'
)
@ -564,9 +534,7 @@ class InterfaceVLANTable(BaseTable):
accessor=Accessor('group__name'),
verbose_name='Group'
)
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
status = ChoiceFieldColumn()
role = tables.TemplateColumn(
template_code=VLAN_ROLE_LINK

View File

@ -10,14 +10,31 @@ MPTT_LINK = """
<a href="{{ record.get_absolute_url }}">{{ record.name }}</a>
"""
COL_TENANT = """
#
# Table columns
#
class TenantColumn(tables.TemplateColumn):
"""
Render a colored label (e.g. for DeviceRoles).
"""
template_code = """
{% if record.tenant %}
<a href="{{ record.tenant.get_absolute_url }}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
{% elif record.vrf.tenant %}
<a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
{% else %}
&mdash;
{% endif %}
"""
def __init__(self, *args, **kwargs):
super().__init__(template_code=self.template_code, *args, **kwargs)
def value(self, value):
return str(value)
#
# Tenant groups

View File

@ -1,7 +1,7 @@
import django_tables2 as tables
from dcim.tables.devices import BaseInterfaceTable
from tenancy.tables import COL_TENANT
from tenancy.tables import TenantColumn
from utilities.tables import (
BaseTable, ButtonsColumn, ChoiceFieldColumn, ColoredLabelColumn, LinkedCountColumn, TagColumn, ToggleColumn,
)
@ -107,9 +107,7 @@ class VirtualMachineTable(BaseTable):
linkify=True
)
role = ColoredLabelColumn()
tenant = tables.TemplateColumn(
template_code=COL_TENANT
)
tenant = TenantColumn()
class Meta(BaseTable.Meta):
model = VirtualMachine