views.py 4.3 KB

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