mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.db.models import Count
 | 
						|
from django.shortcuts import get_object_or_404, render
 | 
						|
 | 
						|
from circuits.models import Circuit
 | 
						|
from dcim.models import Site, Rack, Device, RackReservation
 | 
						|
from ipam.models import IPAddress, Prefix, VLAN, VRF
 | 
						|
from utilities.views import (
 | 
						|
    BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
 | 
						|
)
 | 
						|
from virtualization.models import VirtualMachine, Cluster
 | 
						|
from . import filters, forms, tables
 | 
						|
from .models import Tenant, TenantGroup
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Tenant groups
 | 
						|
#
 | 
						|
 | 
						|
class TenantGroupListView(ObjectListView):
 | 
						|
    queryset = TenantGroup.objects.add_related_count(
 | 
						|
        TenantGroup.objects.all(),
 | 
						|
        Tenant,
 | 
						|
        'group',
 | 
						|
        'tenant_count',
 | 
						|
        cumulative=True
 | 
						|
    )
 | 
						|
    table = tables.TenantGroupTable
 | 
						|
 | 
						|
 | 
						|
class TenantGroupEditView(ObjectEditView):
 | 
						|
    queryset = TenantGroup.objects.all()
 | 
						|
    model_form = forms.TenantGroupForm
 | 
						|
 | 
						|
 | 
						|
class TenantGroupDeleteView(ObjectDeleteView):
 | 
						|
    queryset = TenantGroup.objects.all()
 | 
						|
 | 
						|
 | 
						|
class TenantGroupBulkImportView(BulkImportView):
 | 
						|
    queryset = TenantGroup.objects.all()
 | 
						|
    model_form = forms.TenantGroupCSVForm
 | 
						|
    table = tables.TenantGroupTable
 | 
						|
 | 
						|
 | 
						|
class TenantGroupBulkDeleteView(BulkDeleteView):
 | 
						|
    queryset = TenantGroup.objects.add_related_count(
 | 
						|
        TenantGroup.objects.all(),
 | 
						|
        Tenant,
 | 
						|
        'group',
 | 
						|
        'tenant_count',
 | 
						|
        cumulative=True
 | 
						|
    )
 | 
						|
    table = tables.TenantGroupTable
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
#  Tenants
 | 
						|
#
 | 
						|
 | 
						|
class TenantListView(ObjectListView):
 | 
						|
    queryset = Tenant.objects.prefetch_related('group')
 | 
						|
    filterset = filters.TenantFilterSet
 | 
						|
    filterset_form = forms.TenantFilterForm
 | 
						|
    table = tables.TenantTable
 | 
						|
 | 
						|
 | 
						|
class TenantView(ObjectView):
 | 
						|
    queryset = Tenant.objects.prefetch_related('group')
 | 
						|
 | 
						|
    def get(self, request, slug):
 | 
						|
 | 
						|
        tenant = get_object_or_404(self.queryset, slug=slug)
 | 
						|
        stats = {
 | 
						|
            'site_count': Site.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'rack_count': Rack.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'rackreservation_count': RackReservation.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'device_count': Device.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'vrf_count': VRF.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'prefix_count': Prefix.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'ipaddress_count': IPAddress.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'vlan_count': VLAN.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'circuit_count': Circuit.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'virtualmachine_count': VirtualMachine.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
            'cluster_count': Cluster.objects.restrict(request.user, 'view').filter(tenant=tenant).count(),
 | 
						|
        }
 | 
						|
 | 
						|
        return render(request, 'tenancy/tenant.html', {
 | 
						|
            'tenant': tenant,
 | 
						|
            'stats': stats,
 | 
						|
        })
 | 
						|
 | 
						|
 | 
						|
class TenantEditView(ObjectEditView):
 | 
						|
    queryset = Tenant.objects.all()
 | 
						|
    model_form = forms.TenantForm
 | 
						|
    template_name = 'tenancy/tenant_edit.html'
 | 
						|
 | 
						|
 | 
						|
class TenantDeleteView(ObjectDeleteView):
 | 
						|
    queryset = Tenant.objects.all()
 | 
						|
 | 
						|
 | 
						|
class TenantBulkImportView(BulkImportView):
 | 
						|
    queryset = Tenant.objects.all()
 | 
						|
    model_form = forms.TenantCSVForm
 | 
						|
    table = tables.TenantTable
 | 
						|
 | 
						|
 | 
						|
class TenantBulkEditView(BulkEditView):
 | 
						|
    queryset = Tenant.objects.prefetch_related('group')
 | 
						|
    filterset = filters.TenantFilterSet
 | 
						|
    table = tables.TenantTable
 | 
						|
    form = forms.TenantBulkEditForm
 | 
						|
 | 
						|
 | 
						|
class TenantBulkDeleteView(BulkDeleteView):
 | 
						|
    queryset = Tenant.objects.prefetch_related('group')
 | 
						|
    filterset = filters.TenantFilterSet
 | 
						|
    table = tables.TenantTable
 |