sites.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import django_tables2 as tables
  2. from dcim.models import Location, Region, Site, SiteGroup
  3. from tenancy.tables import TenantColumn
  4. from utilities.tables import (
  5. BaseTable, ButtonsColumn, ChoiceFieldColumn, LinkedCountColumn, MarkdownColumn, MPTTColumn, TagColumn, ToggleColumn,
  6. )
  7. from .template_code import LOCATION_ELEVATIONS
  8. __all__ = (
  9. 'LocationTable',
  10. 'RegionTable',
  11. 'SiteTable',
  12. 'SiteGroupTable',
  13. )
  14. #
  15. # Regions
  16. #
  17. class RegionTable(BaseTable):
  18. pk = ToggleColumn()
  19. name = MPTTColumn(
  20. linkify=True
  21. )
  22. site_count = LinkedCountColumn(
  23. viewname='dcim:site_list',
  24. url_params={'region_id': 'pk'},
  25. verbose_name='Sites'
  26. )
  27. contacts = tables.ManyToManyColumn(
  28. linkify_item=True
  29. )
  30. tags = TagColumn(
  31. url_name='dcim:region_list'
  32. )
  33. actions = ButtonsColumn(Region)
  34. class Meta(BaseTable.Meta):
  35. model = Region
  36. fields = ('pk', 'id', 'name', 'slug', 'site_count', 'description', 'contacts', 'tags', 'actions', 'created', 'last_updated')
  37. default_columns = ('pk', 'name', 'site_count', 'description', 'actions')
  38. #
  39. # Site groups
  40. #
  41. class SiteGroupTable(BaseTable):
  42. pk = ToggleColumn()
  43. name = MPTTColumn(
  44. linkify=True
  45. )
  46. site_count = LinkedCountColumn(
  47. viewname='dcim:site_list',
  48. url_params={'group_id': 'pk'},
  49. verbose_name='Sites'
  50. )
  51. contacts = tables.ManyToManyColumn(
  52. linkify_item=True
  53. )
  54. tags = TagColumn(
  55. url_name='dcim:sitegroup_list'
  56. )
  57. actions = ButtonsColumn(SiteGroup)
  58. class Meta(BaseTable.Meta):
  59. model = SiteGroup
  60. fields = ('pk', 'id', 'name', 'slug', 'site_count', 'description', 'contacts', 'tags', 'actions', 'created', 'last_updated')
  61. default_columns = ('pk', 'name', 'site_count', 'description', 'actions')
  62. #
  63. # Sites
  64. #
  65. class SiteTable(BaseTable):
  66. pk = ToggleColumn()
  67. name = tables.Column(
  68. linkify=True
  69. )
  70. status = ChoiceFieldColumn()
  71. region = tables.Column(
  72. linkify=True
  73. )
  74. group = tables.Column(
  75. linkify=True
  76. )
  77. asn_count = LinkedCountColumn(
  78. accessor=tables.A('asns__count'),
  79. viewname='ipam:asn_list',
  80. url_params={'site_id': 'pk'},
  81. verbose_name='ASN Count'
  82. )
  83. asns = tables.ManyToManyColumn(
  84. linkify_item=True,
  85. verbose_name='ASNs'
  86. )
  87. tenant = TenantColumn()
  88. contacts = tables.ManyToManyColumn(
  89. linkify_item=True
  90. )
  91. comments = MarkdownColumn()
  92. tags = TagColumn(
  93. url_name='dcim:site_list'
  94. )
  95. class Meta(BaseTable.Meta):
  96. model = Site
  97. fields = (
  98. 'pk', 'id', 'name', 'slug', 'status', 'facility', 'region', 'group', 'tenant', 'asns', 'asn_count',
  99. 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name',
  100. 'contact_phone', 'contact_email', 'contacts', 'comments', 'tags', 'created', 'last_updated',
  101. )
  102. default_columns = ('pk', 'name', 'status', 'facility', 'region', 'group', 'tenant', 'description')
  103. #
  104. # Locations
  105. #
  106. class LocationTable(BaseTable):
  107. pk = ToggleColumn()
  108. name = MPTTColumn(
  109. linkify=True
  110. )
  111. site = tables.Column(
  112. linkify=True
  113. )
  114. tenant = TenantColumn()
  115. rack_count = LinkedCountColumn(
  116. viewname='dcim:rack_list',
  117. url_params={'location_id': 'pk'},
  118. verbose_name='Racks'
  119. )
  120. device_count = LinkedCountColumn(
  121. viewname='dcim:device_list',
  122. url_params={'location_id': 'pk'},
  123. verbose_name='Devices'
  124. )
  125. contacts = tables.ManyToManyColumn(
  126. linkify_item=True
  127. )
  128. tags = TagColumn(
  129. url_name='dcim:location_list'
  130. )
  131. actions = ButtonsColumn(
  132. model=Location,
  133. prepend_template=LOCATION_ELEVATIONS
  134. )
  135. class Meta(BaseTable.Meta):
  136. model = Location
  137. fields = (
  138. 'pk', 'id', 'name', 'site', 'tenant', 'rack_count', 'device_count', 'description', 'slug', 'contacts',
  139. 'tags', 'actions', 'created', 'last_updated',
  140. )
  141. default_columns = ('pk', 'name', 'site', 'tenant', 'rack_count', 'device_count', 'description', 'actions')