sites.py 3.9 KB

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