views.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. from django.utils.translation import gettext_lazy as _
  2. from dcim.models import Interface
  3. from extras.ui.panels import CustomFieldsPanel, TagsPanel
  4. from netbox.ui import actions, layout
  5. from netbox.ui.breadcrumbs import Breadcrumb, filtered_list_url
  6. from netbox.ui.panels import (
  7. CommentsPanel,
  8. ObjectsTablePanel,
  9. RelatedObjectsPanel,
  10. )
  11. from netbox.views import generic
  12. from utilities.query import count_related
  13. from utilities.views import GetRelatedModelsMixin, register_model_view
  14. from . import filtersets, forms, tables
  15. from .models import *
  16. from .ui import panels
  17. #
  18. # Wireless LAN groups
  19. #
  20. @register_model_view(WirelessLANGroup, 'list', path='', detail=False)
  21. class WirelessLANGroupListView(generic.ObjectListView):
  22. queryset = WirelessLANGroup.objects.add_related_count(
  23. WirelessLANGroup.objects.all(),
  24. WirelessLAN,
  25. 'group',
  26. 'wirelesslan_count',
  27. cumulative=True
  28. ).prefetch_related('tags')
  29. filterset = filtersets.WirelessLANGroupFilterSet
  30. filterset_form = forms.WirelessLANGroupFilterForm
  31. table = tables.WirelessLANGroupTable
  32. @register_model_view(WirelessLANGroup)
  33. class WirelessLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
  34. queryset = WirelessLANGroup.objects.all()
  35. layout = layout.SimpleLayout(
  36. breadcrumbs=[
  37. Breadcrumb(
  38. lambda o: o.get_ancestors(),
  39. url=filtered_list_url('wireless:wirelesslangroup_list', 'parent_id'),
  40. ),
  41. ],
  42. left_panels=[
  43. panels.WirelessLANGroupPanel(),
  44. TagsPanel(),
  45. CommentsPanel(),
  46. ],
  47. right_panels=[
  48. RelatedObjectsPanel(),
  49. CustomFieldsPanel(),
  50. ],
  51. bottom_panels=[
  52. ObjectsTablePanel(
  53. model='wireless.WirelessLANGroup',
  54. title=_('Child Groups'),
  55. filters={'parent_id': lambda ctx: ctx['object'].pk},
  56. exclude_columns=['parent'],
  57. actions=[
  58. actions.AddObject(
  59. 'wireless.WirelessLANGroup',
  60. label=_('Add Wireless LAN Group'),
  61. url_params={
  62. 'parent': lambda ctx: ctx['object'].pk,
  63. }
  64. ),
  65. ],
  66. ),
  67. ],
  68. )
  69. def get_extra_context(self, request, instance):
  70. groups = instance.get_descendants(include_self=True)
  71. return {
  72. 'related_models': self.get_related_models(request, groups),
  73. }
  74. @register_model_view(WirelessLANGroup, 'add', detail=False)
  75. @register_model_view(WirelessLANGroup, 'edit')
  76. class WirelessLANGroupEditView(generic.ObjectEditView):
  77. queryset = WirelessLANGroup.objects.all()
  78. form = forms.WirelessLANGroupForm
  79. @register_model_view(WirelessLANGroup, 'delete')
  80. class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
  81. queryset = WirelessLANGroup.objects.all()
  82. @register_model_view(WirelessLANGroup, 'bulk_import', path='import', detail=False)
  83. class WirelessLANGroupBulkImportView(generic.BulkImportView):
  84. queryset = WirelessLANGroup.objects.all()
  85. model_form = forms.WirelessLANGroupImportForm
  86. @register_model_view(WirelessLANGroup, 'bulk_edit', path='edit', detail=False)
  87. class WirelessLANGroupBulkEditView(generic.BulkEditView):
  88. queryset = WirelessLANGroup.objects.add_related_count(
  89. WirelessLANGroup.objects.all(),
  90. WirelessLAN,
  91. 'group',
  92. 'wirelesslan_count',
  93. cumulative=True
  94. )
  95. filterset = filtersets.WirelessLANGroupFilterSet
  96. table = tables.WirelessLANGroupTable
  97. form = forms.WirelessLANGroupBulkEditForm
  98. @register_model_view(WirelessLANGroup, 'bulk_rename', path='rename', detail=False)
  99. class WirelessLANGroupBulkRenameView(generic.BulkRenameView):
  100. queryset = WirelessLANGroup.objects.all()
  101. filterset = filtersets.WirelessLANGroupFilterSet
  102. @register_model_view(WirelessLANGroup, 'bulk_delete', path='delete', detail=False)
  103. class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
  104. queryset = WirelessLANGroup.objects.add_related_count(
  105. WirelessLANGroup.objects.all(),
  106. WirelessLAN,
  107. 'group',
  108. 'wirelesslan_count',
  109. cumulative=True
  110. )
  111. filterset = filtersets.WirelessLANGroupFilterSet
  112. table = tables.WirelessLANGroupTable
  113. #
  114. # Wireless LANs
  115. #
  116. @register_model_view(WirelessLAN, 'list', path='', detail=False)
  117. class WirelessLANListView(generic.ObjectListView):
  118. queryset = WirelessLAN.objects.annotate(
  119. interface_count=count_related(Interface, 'wireless_lans')
  120. )
  121. filterset = filtersets.WirelessLANFilterSet
  122. filterset_form = forms.WirelessLANFilterForm
  123. table = tables.WirelessLANTable
  124. @register_model_view(WirelessLAN)
  125. class WirelessLANView(generic.ObjectView):
  126. queryset = WirelessLAN.objects.all()
  127. template_name = 'generic/object.html'
  128. layout = layout.SimpleLayout(
  129. left_panels=[
  130. panels.WirelessLANPanel(),
  131. TagsPanel(),
  132. CommentsPanel(),
  133. ],
  134. right_panels=[
  135. panels.WirelessAuthenticationPanel(),
  136. CustomFieldsPanel(),
  137. ],
  138. bottom_panels=[
  139. ObjectsTablePanel(
  140. model='dcim.Interface',
  141. title=_('Attached Interfaces'),
  142. filters={'wireless_lan_id': lambda ctx: ctx['object'].pk},
  143. ),
  144. ],
  145. )
  146. @register_model_view(WirelessLAN, 'add', detail=False)
  147. @register_model_view(WirelessLAN, 'edit')
  148. class WirelessLANEditView(generic.ObjectEditView):
  149. queryset = WirelessLAN.objects.all()
  150. form = forms.WirelessLANForm
  151. @register_model_view(WirelessLAN, 'delete')
  152. class WirelessLANDeleteView(generic.ObjectDeleteView):
  153. queryset = WirelessLAN.objects.all()
  154. @register_model_view(WirelessLAN, 'bulk_import', path='import', detail=False)
  155. class WirelessLANBulkImportView(generic.BulkImportView):
  156. queryset = WirelessLAN.objects.all()
  157. model_form = forms.WirelessLANImportForm
  158. @register_model_view(WirelessLAN, 'bulk_edit', path='edit', detail=False)
  159. class WirelessLANBulkEditView(generic.BulkEditView):
  160. queryset = WirelessLAN.objects.all()
  161. filterset = filtersets.WirelessLANFilterSet
  162. table = tables.WirelessLANTable
  163. form = forms.WirelessLANBulkEditForm
  164. @register_model_view(WirelessLAN, 'bulk_rename', path='rename', detail=False)
  165. class WirelessLANBulkRenameView(generic.BulkRenameView):
  166. queryset = WirelessLAN.objects.all()
  167. field_name = 'ssid'
  168. filterset = filtersets.WirelessLANFilterSet
  169. @register_model_view(WirelessLAN, 'bulk_delete', path='delete', detail=False)
  170. class WirelessLANBulkDeleteView(generic.BulkDeleteView):
  171. queryset = WirelessLAN.objects.all()
  172. filterset = filtersets.WirelessLANFilterSet
  173. table = tables.WirelessLANTable
  174. #
  175. # Wireless Links
  176. #
  177. @register_model_view(WirelessLink, 'list', path='', detail=False)
  178. class WirelessLinkListView(generic.ObjectListView):
  179. queryset = WirelessLink.objects.all()
  180. filterset = filtersets.WirelessLinkFilterSet
  181. filterset_form = forms.WirelessLinkFilterForm
  182. table = tables.WirelessLinkTable
  183. @register_model_view(WirelessLink)
  184. class WirelessLinkView(generic.ObjectView):
  185. queryset = WirelessLink.objects.all()
  186. template_name = 'generic/object.html'
  187. layout = layout.SimpleLayout(
  188. left_panels=[
  189. panels.WirelessLinkInterfacePanel('interface_a', title=_('Interface A')),
  190. panels.WirelessLinkPropertiesPanel(),
  191. TagsPanel(),
  192. CommentsPanel(),
  193. ],
  194. right_panels=[
  195. panels.WirelessLinkInterfacePanel('interface_b', title=_('Interface B')),
  196. panels.WirelessAuthenticationPanel(),
  197. CustomFieldsPanel(),
  198. ],
  199. )
  200. @register_model_view(WirelessLink, 'add', detail=False)
  201. @register_model_view(WirelessLink, 'edit')
  202. class WirelessLinkEditView(generic.ObjectEditView):
  203. queryset = WirelessLink.objects.all()
  204. form = forms.WirelessLinkForm
  205. @register_model_view(WirelessLink, 'delete')
  206. class WirelessLinkDeleteView(generic.ObjectDeleteView):
  207. queryset = WirelessLink.objects.all()
  208. @register_model_view(WirelessLink, 'bulk_import', path='import', detail=False)
  209. class WirelessLinkBulkImportView(generic.BulkImportView):
  210. queryset = WirelessLink.objects.all()
  211. model_form = forms.WirelessLinkImportForm
  212. @register_model_view(WirelessLink, 'bulk_edit', path='edit', detail=False)
  213. class WirelessLinkBulkEditView(generic.BulkEditView):
  214. queryset = WirelessLink.objects.all()
  215. filterset = filtersets.WirelessLinkFilterSet
  216. table = tables.WirelessLinkTable
  217. form = forms.WirelessLinkBulkEditForm
  218. @register_model_view(WirelessLink, 'bulk_rename', path='rename', detail=False)
  219. class WirelessLinkBulkRenameView(generic.BulkRenameView):
  220. queryset = WirelessLink.objects.all()
  221. field_name = 'ssid'
  222. filterset = filtersets.WirelessLinkFilterSet
  223. @register_model_view(WirelessLink, 'bulk_delete', path='delete', detail=False)
  224. class WirelessLinkBulkDeleteView(generic.BulkDeleteView):
  225. queryset = WirelessLink.objects.all()
  226. filterset = filtersets.WirelessLinkFilterSet
  227. table = tables.WirelessLinkTable