sites.py 4.4 KB

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