Coverage for dcim/tables/sites.py: 100%
46 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import django_tables2 as tables
2from django.utils.translation import gettext_lazy as _
4from dcim.models import Location, Region, Site, SiteGroup
5from netbox.tables import NestedGroupModelTable, PrimaryModelTable, columns
6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
8from .template_code import LOCATION_BUTTONS
10__all__ = (
11 'LocationTable',
12 'RegionTable',
13 'SiteGroupTable',
14 'SiteTable',
15)
18class RegionTable(ContactsColumnMixin, NestedGroupModelTable):
19 site_count = columns.LinkedCountColumn(
20 viewname='dcim:site_list',
21 url_params={'region_id': 'pk'},
22 verbose_name=_('Sites')
23 )
24 tags = columns.TagColumn(
25 url_name='dcim:region_list'
26 )
28 class Meta(NestedGroupModelTable.Meta):
29 model = Region
30 fields = (
31 'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags',
32 'created', 'last_updated', 'actions',
33 )
34 default_columns = ('pk', 'name', 'site_count', 'description')
37class SiteGroupTable(ContactsColumnMixin, NestedGroupModelTable):
38 site_count = columns.LinkedCountColumn(
39 viewname='dcim:site_list',
40 url_params={'group_id': 'pk'},
41 verbose_name=_('Sites')
42 )
43 tags = columns.TagColumn(
44 url_name='dcim:sitegroup_list'
45 )
47 class Meta(NestedGroupModelTable.Meta):
48 model = SiteGroup
49 fields = (
50 'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags',
51 'created', 'last_updated', 'actions',
52 )
53 default_columns = ('pk', 'name', 'site_count', 'description')
56class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
57 name = tables.Column(
58 verbose_name=_('Name'),
59 linkify=True
60 )
61 status = columns.ChoiceFieldColumn(
62 verbose_name=_('Status'),
63 )
64 region = tables.Column(
65 verbose_name=_('Region'),
66 linkify=True
67 )
68 group = tables.Column(
69 verbose_name=_('Group'),
70 linkify=True
71 )
72 asns = columns.ManyToManyColumn(
73 linkify_item=True,
74 verbose_name=_('ASNs')
75 )
76 asn_count = columns.LinkedCountColumn(
77 viewname='ipam:asn_list',
78 url_params={'site_id': 'pk'},
79 verbose_name=_('ASN Count')
80 )
81 device_count = columns.LinkedCountColumn(
82 viewname='dcim:device_list',
83 url_params={'site_id': 'pk'},
84 verbose_name=_('Devices')
85 )
86 tags = columns.TagColumn(
87 url_name='dcim:site_list'
88 )
90 class Meta(PrimaryModelTable.Meta):
91 model = Site
92 fields = (
93 'pk', 'id', 'name', 'slug', 'status', 'facility', 'region', 'group', 'tenant', 'tenant_group', 'asns',
94 'asn_count', 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude',
95 'comments', 'contacts', 'tags', 'created', 'last_updated', 'actions',
96 )
97 default_columns = ('pk', 'name', 'status', 'facility', 'region', 'group', 'tenant', 'description')
100class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NestedGroupModelTable):
101 site = tables.Column(
102 verbose_name=_('Site'),
103 linkify=True
104 )
105 status = columns.ChoiceFieldColumn(
106 verbose_name=_('Status'),
107 )
108 rack_count = columns.LinkedCountColumn(
109 viewname='dcim:rack_list',
110 url_params={'location_id': 'pk'},
111 verbose_name=_('Racks')
112 )
113 device_count = columns.LinkedCountColumn(
114 viewname='dcim:device_list',
115 url_params={'location_id': 'pk'},
116 verbose_name=_('Devices')
117 )
118 vlangroup_count = columns.LinkedCountColumn(
119 viewname='ipam:vlangroup_list',
120 url_params={'location': 'pk'},
121 verbose_name=_('VLAN Groups')
122 )
123 tags = columns.TagColumn(
124 url_name='dcim:location_list'
125 )
126 actions = columns.ActionsColumn(
127 extra_buttons=LOCATION_BUTTONS
128 )
130 class Meta(NestedGroupModelTable.Meta):
131 model = Location
132 fields = (
133 'pk', 'id', 'name', 'parent', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count',
134 'device_count', 'description', 'slug', 'comments', 'contacts', 'tags', 'actions', 'created', 'last_updated',
135 'vlangroup_count',
136 )
137 default_columns = (
138 'pk', 'name', 'site', 'status', 'facility', 'tenant', 'rack_count', 'device_count', 'vlangroup_count',
139 'description'
140 )