123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- from __future__ import unicode_literals
- import django_filters
- from django.db.models import Q
- from dcim.models import Site
- from extras.filters import CustomFieldFilterSet
- from tenancy.models import Tenant
- from utilities.filters import NumericInFilter
- from .constants import CIRCUIT_STATUS_CHOICES
- from .models import Provider, Circuit, CircuitTermination, CircuitType
- class ProviderFilter(CustomFieldFilterSet, django_filters.FilterSet):
- id__in = NumericInFilter(name='id', lookup_expr='in')
- q = django_filters.CharFilter(
- method='search',
- label='Search',
- )
- site_id = django_filters.ModelMultipleChoiceFilter(
- name='circuits__terminations__site',
- queryset=Site.objects.all(),
- label='Site',
- )
- site = django_filters.ModelMultipleChoiceFilter(
- name='circuits__terminations__site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- class Meta:
- model = Provider
- fields = ['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 CircuitTypeFilter(django_filters.FilterSet):
- class Meta:
- model = CircuitType
- fields = ['name', 'slug']
- class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet):
- id__in = NumericInFilter(name='id', lookup_expr='in')
- q = django_filters.CharFilter(
- method='search',
- label='Search',
- )
- provider_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Provider.objects.all(),
- label='Provider (ID)',
- )
- provider = django_filters.ModelMultipleChoiceFilter(
- name='provider__slug',
- queryset=Provider.objects.all(),
- to_field_name='slug',
- label='Provider (slug)',
- )
- type_id = django_filters.ModelMultipleChoiceFilter(
- queryset=CircuitType.objects.all(),
- label='Circuit type (ID)',
- )
- type = django_filters.ModelMultipleChoiceFilter(
- name='type__slug',
- queryset=CircuitType.objects.all(),
- to_field_name='slug',
- label='Circuit type (slug)',
- )
- status = django_filters.MultipleChoiceFilter(
- choices=CIRCUIT_STATUS_CHOICES,
- null_value=None
- )
- tenant_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Tenant.objects.all(),
- label='Tenant (ID)',
- )
- tenant = django_filters.ModelMultipleChoiceFilter(
- name='tenant__slug',
- queryset=Tenant.objects.all(),
- to_field_name='slug',
- label='Tenant (slug)',
- )
- site_id = django_filters.ModelMultipleChoiceFilter(
- name='terminations__site',
- queryset=Site.objects.all(),
- label='Site (ID)',
- )
- site = django_filters.ModelMultipleChoiceFilter(
- name='terminations__site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- class Meta:
- model = Circuit
- fields = ['cid', 'install_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(description__icontains=value) |
- Q(comments__icontains=value)
- ).distinct()
- class CircuitTerminationFilter(django_filters.FilterSet):
- 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(
- name='site__slug',
- queryset=Site.objects.all(),
- to_field_name='slug',
- label='Site (slug)',
- )
- class Meta:
- model = CircuitTermination
- fields = ['term_side', 'port_speed', 'upstream_speed', 'xconnect_id']
- 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)
- ).distinct()
|