views.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. from circuits.models import Circuit
  2. from dcim.models import Site, Rack, Device, RackReservation
  3. from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
  4. from netbox.views import generic
  5. from utilities.tables import paginate_table
  6. from virtualization.models import VirtualMachine, Cluster
  7. from . import filtersets, forms, tables
  8. from .models import Tenant, TenantGroup
  9. #
  10. # Tenant groups
  11. #
  12. class TenantGroupListView(generic.ObjectListView):
  13. queryset = TenantGroup.objects.add_related_count(
  14. TenantGroup.objects.all(),
  15. Tenant,
  16. 'group',
  17. 'tenant_count',
  18. cumulative=True
  19. )
  20. filterset = filtersets.TenantGroupFilterSet
  21. filterset_form = forms.TenantGroupFilterForm
  22. table = tables.TenantGroupTable
  23. class TenantGroupView(generic.ObjectView):
  24. queryset = TenantGroup.objects.all()
  25. def get_extra_context(self, request, instance):
  26. tenants = Tenant.objects.restrict(request.user, 'view').filter(
  27. group=instance
  28. )
  29. tenants_table = tables.TenantTable(tenants)
  30. tenants_table.columns.hide('group')
  31. paginate_table(tenants_table, request)
  32. return {
  33. 'tenants_table': tenants_table,
  34. }
  35. class TenantGroupEditView(generic.ObjectEditView):
  36. queryset = TenantGroup.objects.all()
  37. model_form = forms.TenantGroupForm
  38. class TenantGroupDeleteView(generic.ObjectDeleteView):
  39. queryset = TenantGroup.objects.all()
  40. class TenantGroupBulkImportView(generic.BulkImportView):
  41. queryset = TenantGroup.objects.all()
  42. model_form = forms.TenantGroupCSVForm
  43. table = tables.TenantGroupTable
  44. class TenantGroupBulkEditView(generic.BulkEditView):
  45. queryset = TenantGroup.objects.add_related_count(
  46. TenantGroup.objects.all(),
  47. Tenant,
  48. 'group',
  49. 'tenant_count',
  50. cumulative=True
  51. )
  52. filterset = filtersets.TenantGroupFilterSet
  53. table = tables.TenantGroupTable
  54. form = forms.TenantGroupBulkEditForm
  55. class TenantGroupBulkDeleteView(generic.BulkDeleteView):
  56. queryset = TenantGroup.objects.add_related_count(
  57. TenantGroup.objects.all(),
  58. Tenant,
  59. 'group',
  60. 'tenant_count',
  61. cumulative=True
  62. )
  63. table = tables.TenantGroupTable
  64. #
  65. # Tenants
  66. #
  67. class TenantListView(generic.ObjectListView):
  68. queryset = Tenant.objects.all()
  69. filterset = filtersets.TenantFilterSet
  70. filterset_form = forms.TenantFilterForm
  71. table = tables.TenantTable
  72. class TenantView(generic.ObjectView):
  73. queryset = Tenant.objects.prefetch_related('group')
  74. def get_extra_context(self, request, instance):
  75. stats = {
  76. 'site_count': Site.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  77. 'rack_count': Rack.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  78. 'rackreservation_count': RackReservation.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  79. 'device_count': Device.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  80. 'vrf_count': VRF.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  81. 'prefix_count': Prefix.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  82. 'aggregate_count': Aggregate.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  83. 'ipaddress_count': IPAddress.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  84. 'vlan_count': VLAN.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  85. 'circuit_count': Circuit.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  86. 'virtualmachine_count': VirtualMachine.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  87. 'cluster_count': Cluster.objects.restrict(request.user, 'view').filter(tenant=instance).count(),
  88. }
  89. return {
  90. 'stats': stats,
  91. }
  92. class TenantEditView(generic.ObjectEditView):
  93. queryset = Tenant.objects.all()
  94. model_form = forms.TenantForm
  95. class TenantDeleteView(generic.ObjectDeleteView):
  96. queryset = Tenant.objects.all()
  97. class TenantBulkImportView(generic.BulkImportView):
  98. queryset = Tenant.objects.all()
  99. model_form = forms.TenantCSVForm
  100. table = tables.TenantTable
  101. class TenantBulkEditView(generic.BulkEditView):
  102. queryset = Tenant.objects.prefetch_related('group')
  103. filterset = filtersets.TenantFilterSet
  104. table = tables.TenantTable
  105. form = forms.TenantBulkEditForm
  106. class TenantBulkDeleteView(generic.BulkDeleteView):
  107. queryset = Tenant.objects.prefetch_related('group')
  108. filterset = filtersets.TenantFilterSet
  109. table = tables.TenantTable