| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- import django_filters
- from django.db.models import Q
- from dcim.filtersets import CabledObjectFilterSet
- from dcim.models import Region, Site, SiteGroup
- from ipam.models import ASN
- from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
- from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
- from utilities.filters import TreeNodeMultipleChoiceFilter
- from .choices import *
- from .models import *
- __all__ = (
- 'CircuitFilterSet',
- 'CircuitTerminationFilterSet',
- 'CircuitTypeFilterSet',
- 'ProviderNetworkFilterSet',
- 'ProviderFilterSet',
- )
- class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
- region_id = TreeNodeMultipleChoiceFilter(
- queryset=Region.objects.all(),
- field_name='circuits__terminations__site__region',
- lookup_expr='in',
- label='Region (ID)',
- )
- region = TreeNodeMultipleChoiceFilter(
- queryset=Region.objects.all(),
- field_name='circuits__terminations__site__region',
- lookup_expr='in',
- to_field_name='slug',
- label='Region (slug)',
- )
- site_group_id = TreeNodeMultipleChoiceFilter(
- queryset=SiteGroup.objects.all(),
- field_name='circuits__terminations__site__group',
- lookup_expr='in',
- label='Site group (ID)',
- )
- site_group = TreeNodeMultipleChoiceFilter(
- queryset=SiteGroup.objects.all(),
- field_name='circuits__terminations__site__group',
- lookup_expr='in',
- to_field_name='slug',
- label='Site group (slug)',
- )
- site_id = django_filters.ModelMultipleChoiceFilter(
- field_name='circuits__terminations__site',
- queryset=Site.objects.all(),
- label='Site',
- )
- site = django_filters.ModelMultipleChoiceFilter(
- field_name='circuits__terminations__site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- asn_id = django_filters.ModelMultipleChoiceFilter(
- field_name='asns',
- queryset=ASN.objects.all(),
- label='ASN (ID)',
- )
- class Meta:
- model = Provider
- fields = ['id', 'name', 'slug', 'asn', 'account']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(account__icontains=value) |
- Q(noc_contact__icontains=value) |
- Q(admin_contact__icontains=value) |
- Q(comments__icontains=value)
- )
- class ProviderNetworkFilterSet(NetBoxModelFilterSet):
- provider_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Provider.objects.all(),
- label='Provider (ID)',
- )
- provider = django_filters.ModelMultipleChoiceFilter(
- field_name='provider__slug',
- queryset=Provider.objects.all(),
- to_field_name='slug',
- label='Provider (slug)',
- )
- class Meta:
- model = ProviderNetwork
- fields = ['id', 'name', 'service_id', 'description']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(service_id__icontains=value) |
- Q(description__icontains=value) |
- Q(comments__icontains=value)
- ).distinct()
- class CircuitTypeFilterSet(OrganizationalModelFilterSet):
- class Meta:
- model = CircuitType
- fields = ['id', 'name', 'slug', 'description']
- class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
- provider_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Provider.objects.all(),
- label='Provider (ID)',
- )
- provider = django_filters.ModelMultipleChoiceFilter(
- field_name='provider__slug',
- queryset=Provider.objects.all(),
- to_field_name='slug',
- label='Provider (slug)',
- )
- provider_network_id = django_filters.ModelMultipleChoiceFilter(
- field_name='terminations__provider_network',
- queryset=ProviderNetwork.objects.all(),
- label='ProviderNetwork (ID)',
- )
- type_id = django_filters.ModelMultipleChoiceFilter(
- queryset=CircuitType.objects.all(),
- label='Circuit type (ID)',
- )
- type = django_filters.ModelMultipleChoiceFilter(
- field_name='type__slug',
- queryset=CircuitType.objects.all(),
- to_field_name='slug',
- label='Circuit type (slug)',
- )
- status = django_filters.MultipleChoiceFilter(
- choices=CircuitStatusChoices,
- null_value=None
- )
- region_id = TreeNodeMultipleChoiceFilter(
- queryset=Region.objects.all(),
- field_name='terminations__site__region',
- lookup_expr='in',
- label='Region (ID)',
- )
- region = TreeNodeMultipleChoiceFilter(
- queryset=Region.objects.all(),
- field_name='terminations__site__region',
- lookup_expr='in',
- to_field_name='slug',
- label='Region (slug)',
- )
- site_group_id = TreeNodeMultipleChoiceFilter(
- queryset=SiteGroup.objects.all(),
- field_name='terminations__site__group',
- lookup_expr='in',
- label='Site group (ID)',
- )
- site_group = TreeNodeMultipleChoiceFilter(
- queryset=SiteGroup.objects.all(),
- field_name='terminations__site__group',
- lookup_expr='in',
- to_field_name='slug',
- label='Site group (slug)',
- )
- site_id = django_filters.ModelMultipleChoiceFilter(
- field_name='terminations__site',
- queryset=Site.objects.all(),
- label='Site (ID)',
- )
- site = django_filters.ModelMultipleChoiceFilter(
- field_name='terminations__site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- class Meta:
- model = Circuit
- fields = ['id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(cid__icontains=value) |
- Q(terminations__xconnect_id__icontains=value) |
- Q(terminations__pp_info__icontains=value) |
- Q(terminations__description__icontains=value) |
- Q(description__icontains=value) |
- Q(comments__icontains=value)
- ).distinct()
- class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
- q = django_filters.CharFilter(
- method='search',
- label='Search',
- )
- circuit_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Circuit.objects.all(),
- label='Circuit',
- )
- site_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Site.objects.all(),
- label='Site (ID)',
- )
- site = django_filters.ModelMultipleChoiceFilter(
- field_name='site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- provider_network_id = django_filters.ModelMultipleChoiceFilter(
- queryset=ProviderNetwork.objects.all(),
- label='ProviderNetwork (ID)',
- )
- class Meta:
- model = CircuitTermination
- fields = ['id', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id', 'description', 'cable_end']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(circuit__cid__icontains=value) |
- Q(xconnect_id__icontains=value) |
- Q(pp_info__icontains=value) |
- Q(description__icontains=value)
- ).distinct()
|