views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from django.contrib.auth.mixins import PermissionRequiredMixin
  2. from django.core.urlresolvers import reverse
  3. from django.db.models import Count, Q
  4. from django.shortcuts import get_object_or_404, render
  5. from circuits.models import Circuit
  6. from dcim.models import Site, Rack, Device
  7. from ipam.models import IPAddress, Prefix, VLAN, VRF
  8. from utilities.views import (
  9. BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
  10. )
  11. from models import Tenant, TenantGroup
  12. from . import filters, forms, tables
  13. #
  14. # Tenant groups
  15. #
  16. class TenantGroupListView(ObjectListView):
  17. queryset = TenantGroup.objects.annotate(tenant_count=Count('tenants'))
  18. table = tables.TenantGroupTable
  19. edit_permissions = ['tenancy.change_tenantgroup', 'tenancy.delete_tenantgroup']
  20. template_name = 'tenancy/tenantgroup_list.html'
  21. class TenantGroupEditView(PermissionRequiredMixin, ObjectEditView):
  22. permission_required = 'tenancy.change_tenantgroup'
  23. model = TenantGroup
  24. form_class = forms.TenantGroupForm
  25. def get_return_url(self, obj):
  26. return reverse('tenancy:tenantgroup_list')
  27. class TenantGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  28. permission_required = 'tenancy.delete_tenantgroup'
  29. cls = TenantGroup
  30. default_redirect_url = 'tenancy:tenantgroup_list'
  31. #
  32. # Tenants
  33. #
  34. class TenantListView(ObjectListView):
  35. queryset = Tenant.objects.select_related('group')
  36. filter = filters.TenantFilter
  37. filter_form = forms.TenantFilterForm
  38. table = tables.TenantTable
  39. edit_permissions = ['tenancy.change_tenant', 'tenancy.delete_tenant']
  40. template_name = 'tenancy/tenant_list.html'
  41. def tenant(request, slug):
  42. tenant = get_object_or_404(Tenant, slug=slug)
  43. stats = {
  44. 'site_count': Site.objects.filter(tenant=tenant).count(),
  45. 'rack_count': Rack.objects.filter(tenant=tenant).count(),
  46. 'device_count': Device.objects.filter(tenant=tenant).count(),
  47. 'vrf_count': VRF.objects.filter(tenant=tenant).count(),
  48. 'prefix_count': Prefix.objects.filter(
  49. Q(tenant=tenant) |
  50. Q(tenant__isnull=True, vrf__tenant=tenant)
  51. ).count(),
  52. 'ipaddress_count': IPAddress.objects.filter(
  53. Q(tenant=tenant) |
  54. Q(tenant__isnull=True, vrf__tenant=tenant)
  55. ).count(),
  56. 'vlan_count': VLAN.objects.filter(tenant=tenant).count(),
  57. 'circuit_count': Circuit.objects.filter(tenant=tenant).count(),
  58. }
  59. return render(request, 'tenancy/tenant.html', {
  60. 'tenant': tenant,
  61. 'stats': stats,
  62. })
  63. class TenantEditView(PermissionRequiredMixin, ObjectEditView):
  64. permission_required = 'tenancy.change_tenant'
  65. model = Tenant
  66. form_class = forms.TenantForm
  67. fields_initial = ['group']
  68. template_name = 'tenancy/tenant_edit.html'
  69. obj_list_url = 'tenancy:tenant_list'
  70. class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  71. permission_required = 'tenancy.delete_tenant'
  72. model = Tenant
  73. default_return_url = 'tenancy:tenant_list'
  74. class TenantBulkImportView(PermissionRequiredMixin, BulkImportView):
  75. permission_required = 'tenancy.add_tenant'
  76. form = forms.TenantImportForm
  77. table = tables.TenantTable
  78. template_name = 'tenancy/tenant_import.html'
  79. obj_list_url = 'tenancy:tenant_list'
  80. class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
  81. permission_required = 'tenancy.change_tenant'
  82. cls = Tenant
  83. filter = filters.TenantFilter
  84. form = forms.TenantBulkEditForm
  85. template_name = 'tenancy/tenant_bulk_edit.html'
  86. default_redirect_url = 'tenancy:tenant_list'
  87. class TenantBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  88. permission_required = 'tenancy.delete_tenant'
  89. cls = Tenant
  90. filter = filters.TenantFilter
  91. default_redirect_url = 'tenancy:tenant_list'