views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. from django.contrib.auth.mixins import PermissionRequiredMixin
  2. from django.db.models import Count
  3. from django.shortcuts import get_object_or_404, render
  4. from django.views.generic import View
  5. from circuits.models import Circuit
  6. from dcim.models import Site, Rack, Device, RackReservation
  7. from ipam.models import IPAddress, Prefix, VLAN, VRF
  8. from utilities.views import (
  9. BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
  10. )
  11. from virtualization.models import VirtualMachine, Cluster
  12. from . import filters, forms, tables
  13. from .models import Tenant, TenantGroup
  14. #
  15. # Tenant groups
  16. #
  17. class TenantGroupListView(PermissionRequiredMixin, ObjectListView):
  18. permission_required = 'tenancy.view_tenantgroup'
  19. queryset = TenantGroup.objects.add_related_count(
  20. TenantGroup.objects.all(),
  21. Tenant,
  22. 'group',
  23. 'tenant_count',
  24. cumulative=True
  25. )
  26. table = tables.TenantGroupTable
  27. class TenantGroupCreateView(PermissionRequiredMixin, ObjectEditView):
  28. permission_required = 'tenancy.add_tenantgroup'
  29. model = TenantGroup
  30. model_form = forms.TenantGroupForm
  31. default_return_url = 'tenancy:tenantgroup_list'
  32. class TenantGroupEditView(TenantGroupCreateView):
  33. permission_required = 'tenancy.change_tenantgroup'
  34. class TenantGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
  35. permission_required = 'tenancy.add_tenantgroup'
  36. model_form = forms.TenantGroupCSVForm
  37. table = tables.TenantGroupTable
  38. default_return_url = 'tenancy:tenantgroup_list'
  39. class TenantGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  40. permission_required = 'tenancy.delete_tenantgroup'
  41. queryset = TenantGroup.objects.annotate(tenant_count=Count('tenants'))
  42. table = tables.TenantGroupTable
  43. default_return_url = 'tenancy:tenantgroup_list'
  44. #
  45. # Tenants
  46. #
  47. class TenantListView(PermissionRequiredMixin, ObjectListView):
  48. permission_required = 'tenancy.view_tenant'
  49. queryset = Tenant.objects.prefetch_related('group')
  50. filterset = filters.TenantFilterSet
  51. filterset_form = forms.TenantFilterForm
  52. table = tables.TenantTable
  53. class TenantView(PermissionRequiredMixin, View):
  54. permission_required = 'tenancy.view_tenant'
  55. def get(self, request, slug):
  56. tenant = get_object_or_404(Tenant, slug=slug)
  57. stats = {
  58. 'site_count': Site.objects.filter(tenant=tenant).count(),
  59. 'rack_count': Rack.objects.filter(tenant=tenant).count(),
  60. 'rackreservation_count': RackReservation.objects.filter(tenant=tenant).count(),
  61. 'device_count': Device.objects.filter(tenant=tenant).count(),
  62. 'vrf_count': VRF.objects.filter(tenant=tenant).count(),
  63. 'prefix_count': Prefix.objects.filter(tenant=tenant).count(),
  64. 'ipaddress_count': IPAddress.objects.filter(tenant=tenant).count(),
  65. 'vlan_count': VLAN.objects.filter(tenant=tenant).count(),
  66. 'circuit_count': Circuit.objects.filter(tenant=tenant).count(),
  67. 'virtualmachine_count': VirtualMachine.objects.filter(tenant=tenant).count(),
  68. 'cluster_count': Cluster.objects.filter(tenant=tenant).count(),
  69. }
  70. return render(request, 'tenancy/tenant.html', {
  71. 'tenant': tenant,
  72. 'stats': stats,
  73. })
  74. class TenantCreateView(PermissionRequiredMixin, ObjectEditView):
  75. permission_required = 'tenancy.add_tenant'
  76. model = Tenant
  77. model_form = forms.TenantForm
  78. template_name = 'tenancy/tenant_edit.html'
  79. default_return_url = 'tenancy:tenant_list'
  80. class TenantEditView(TenantCreateView):
  81. permission_required = 'tenancy.change_tenant'
  82. class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  83. permission_required = 'tenancy.delete_tenant'
  84. model = Tenant
  85. default_return_url = 'tenancy:tenant_list'
  86. class TenantBulkImportView(PermissionRequiredMixin, BulkImportView):
  87. permission_required = 'tenancy.add_tenant'
  88. model_form = forms.TenantCSVForm
  89. table = tables.TenantTable
  90. default_return_url = 'tenancy:tenant_list'
  91. class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
  92. permission_required = 'tenancy.change_tenant'
  93. queryset = Tenant.objects.prefetch_related('group')
  94. filterset = filters.TenantFilterSet
  95. table = tables.TenantTable
  96. form = forms.TenantBulkEditForm
  97. default_return_url = 'tenancy:tenant_list'
  98. class TenantBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  99. permission_required = 'tenancy.delete_tenant'
  100. queryset = Tenant.objects.prefetch_related('group')
  101. filterset = filters.TenantFilterSet
  102. table = tables.TenantTable
  103. default_return_url = 'tenancy:tenant_list'