views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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(ObjectListView):
  18. queryset = TenantGroup.objects.add_related_count(
  19. TenantGroup.objects.all(),
  20. Tenant,
  21. 'group',
  22. 'tenant_count',
  23. cumulative=True
  24. )
  25. table = tables.TenantGroupTable
  26. class TenantGroupEditView(ObjectEditView):
  27. queryset = TenantGroup.objects.all()
  28. model_form = forms.TenantGroupForm
  29. default_return_url = 'tenancy:tenantgroup_list'
  30. class TenantGroupBulkImportView(BulkImportView):
  31. queryset = TenantGroup.objects.all()
  32. model_form = forms.TenantGroupCSVForm
  33. table = tables.TenantGroupTable
  34. default_return_url = 'tenancy:tenantgroup_list'
  35. class TenantGroupBulkDeleteView(BulkDeleteView):
  36. queryset = TenantGroup.objects.annotate(tenant_count=Count('tenants'))
  37. table = tables.TenantGroupTable
  38. default_return_url = 'tenancy:tenantgroup_list'
  39. #
  40. # Tenants
  41. #
  42. class TenantListView(ObjectListView):
  43. queryset = Tenant.objects.prefetch_related('group')
  44. filterset = filters.TenantFilterSet
  45. filterset_form = forms.TenantFilterForm
  46. table = tables.TenantTable
  47. class TenantView(PermissionRequiredMixin, View):
  48. permission_required = 'tenancy.view_tenant'
  49. def get(self, request, slug):
  50. tenant = get_object_or_404(Tenant, slug=slug)
  51. stats = {
  52. 'site_count': Site.objects.filter(tenant=tenant).count(),
  53. 'rack_count': Rack.objects.filter(tenant=tenant).count(),
  54. 'rackreservation_count': RackReservation.objects.filter(tenant=tenant).count(),
  55. 'device_count': Device.objects.filter(tenant=tenant).count(),
  56. 'vrf_count': VRF.objects.filter(tenant=tenant).count(),
  57. 'prefix_count': Prefix.objects.filter(tenant=tenant).count(),
  58. 'ipaddress_count': IPAddress.objects.filter(tenant=tenant).count(),
  59. 'vlan_count': VLAN.objects.filter(tenant=tenant).count(),
  60. 'circuit_count': Circuit.objects.filter(tenant=tenant).count(),
  61. 'virtualmachine_count': VirtualMachine.objects.filter(tenant=tenant).count(),
  62. 'cluster_count': Cluster.objects.filter(tenant=tenant).count(),
  63. }
  64. return render(request, 'tenancy/tenant.html', {
  65. 'tenant': tenant,
  66. 'stats': stats,
  67. })
  68. class TenantEditView(ObjectEditView):
  69. queryset = Tenant.objects.all()
  70. model_form = forms.TenantForm
  71. template_name = 'tenancy/tenant_edit.html'
  72. default_return_url = 'tenancy:tenant_list'
  73. class TenantDeleteView(ObjectDeleteView):
  74. queryset = Tenant.objects.all()
  75. default_return_url = 'tenancy:tenant_list'
  76. class TenantBulkImportView(BulkImportView):
  77. queryset = Tenant.objects.all()
  78. model_form = forms.TenantCSVForm
  79. table = tables.TenantTable
  80. default_return_url = 'tenancy:tenant_list'
  81. class TenantBulkEditView(BulkEditView):
  82. queryset = Tenant.objects.prefetch_related('group')
  83. filterset = filters.TenantFilterSet
  84. table = tables.TenantTable
  85. form = forms.TenantBulkEditForm
  86. default_return_url = 'tenancy:tenant_list'
  87. class TenantBulkDeleteView(BulkDeleteView):
  88. queryset = Tenant.objects.prefetch_related('group')
  89. filterset = filters.TenantFilterSet
  90. table = tables.TenantTable
  91. default_return_url = 'tenancy:tenant_list'