sites.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. tags = TagColumn(
  28. url_name='dcim:region_list'
  29. )
  30. actions = ButtonsColumn(Region)
  31. class Meta(BaseTable.Meta):
  32. model = Region
  33. fields = ('pk', 'id', 'name', 'slug', 'site_count', 'description', 'tags', 'actions', 'created', 'last_updated')
  34. default_columns = ('pk', 'name', 'site_count', 'description', 'actions')
  35. #
  36. # Site groups
  37. #
  38. class SiteGroupTable(BaseTable):
  39. pk = ToggleColumn()
  40. name = MPTTColumn(
  41. linkify=True
  42. )
  43. site_count = LinkedCountColumn(
  44. viewname='dcim:site_list',
  45. url_params={'group_id': 'pk'},
  46. verbose_name='Sites'
  47. )
  48. tags = TagColumn(
  49. url_name='dcim:sitegroup_list'
  50. )
  51. actions = ButtonsColumn(SiteGroup)
  52. class Meta(BaseTable.Meta):
  53. model = SiteGroup
  54. fields = ('pk', 'id', 'name', 'slug', 'site_count', 'description', 'tags', 'actions', 'created', 'last_updated')
  55. default_columns = ('pk', 'name', 'site_count', 'description', 'actions')
  56. #
  57. # Sites
  58. #
  59. class SiteTable(BaseTable):
  60. pk = ToggleColumn()
  61. name = tables.Column(
  62. linkify=True
  63. )
  64. status = ChoiceFieldColumn()
  65. region = tables.Column(
  66. linkify=True
  67. )
  68. group = tables.Column(
  69. linkify=True
  70. )
  71. asn_count = LinkedCountColumn(
  72. accessor=tables.A('asns.count'),
  73. viewname='ipam:asn_list',
  74. url_params={'site_id': 'pk'},
  75. verbose_name='ASNs'
  76. )
  77. tenant = TenantColumn()
  78. comments = MarkdownColumn()
  79. tags = TagColumn(
  80. url_name='dcim:site_list'
  81. )
  82. class Meta(BaseTable.Meta):
  83. model = Site
  84. fields = (
  85. 'pk', 'id', 'name', 'slug', 'status', 'facility', 'region', 'group', 'tenant', 'asn_count', 'time_zone',
  86. 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name',
  87. 'contact_phone', 'contact_email', 'comments', 'tags', 'created', 'last_updated',
  88. )
  89. default_columns = ('pk', 'name', 'status', 'facility', 'region', 'group', 'tenant', 'description')
  90. #
  91. # Locations
  92. #
  93. class LocationTable(BaseTable):
  94. pk = ToggleColumn()
  95. name = MPTTColumn(
  96. linkify=True
  97. )
  98. site = tables.Column(
  99. linkify=True
  100. )
  101. tenant = TenantColumn()
  102. rack_count = LinkedCountColumn(
  103. viewname='dcim:rack_list',
  104. url_params={'location_id': 'pk'},
  105. verbose_name='Racks'
  106. )
  107. device_count = LinkedCountColumn(
  108. viewname='dcim:device_list',
  109. url_params={'location_id': 'pk'},
  110. verbose_name='Devices'
  111. )
  112. tags = TagColumn(
  113. url_name='dcim:location_list'
  114. )
  115. actions = ButtonsColumn(
  116. model=Location,
  117. prepend_template=LOCATION_ELEVATIONS
  118. )
  119. class Meta(BaseTable.Meta):
  120. model = Location
  121. fields = (
  122. 'pk', 'id', 'name', 'site', 'tenant', 'rack_count', 'device_count', 'description', 'slug', 'tags',
  123. 'actions', 'created', 'last_updated',
  124. )
  125. default_columns = ('pk', 'name', 'site', 'tenant', 'rack_count', 'device_count', 'description', 'actions')