123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- from __future__ import unicode_literals
- import django_filters
- from django.db.models import Q
- from dcim.models import Platform
- from extras.filters import CustomFieldFilterSet
- from tenancy.models import Tenant
- from utilities.filters import NullableModelMultipleChoiceFilter, NumericInFilter
- from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
- class ClusterFilter(CustomFieldFilterSet):
- id__in = NumericInFilter(name='id', lookup_expr='in')
- q = django_filters.CharFilter(
- method='search',
- label='Search',
- )
- group_id = NullableModelMultipleChoiceFilter(
- queryset=ClusterGroup.objects.all(),
- label='Parent group (ID)',
- )
- group = NullableModelMultipleChoiceFilter(
- queryset=ClusterGroup.objects.all(),
- to_field_name='slug',
- label='Parent group (slug)',
- )
- type_id = django_filters.ModelMultipleChoiceFilter(
- queryset=ClusterType.objects.all(),
- label='Cluster type (ID)',
- )
- type = django_filters.ModelMultipleChoiceFilter(
- name='type__slug',
- queryset=ClusterType.objects.all(),
- to_field_name='slug',
- label='Cluster type (slug)',
- )
- class Meta:
- model = Cluster
- fields = ['name']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(comments__icontains=value)
- )
- class VirtualMachineFilter(CustomFieldFilterSet):
- id__in = NumericInFilter(name='id', lookup_expr='in')
- q = django_filters.CharFilter(
- method='search',
- label='Search',
- )
- cluster_group_id = NullableModelMultipleChoiceFilter(
- name='cluster__group',
- queryset=ClusterGroup.objects.all(),
- label='Cluster group (ID)',
- )
- cluster_group = NullableModelMultipleChoiceFilter(
- name='cluster__group__slug',
- queryset=ClusterGroup.objects.all(),
- to_field_name='slug',
- label='Cluster group (slug)',
- )
- tenant_id = NullableModelMultipleChoiceFilter(
- queryset=Tenant.objects.all(),
- label='Tenant (ID)',
- )
- tenant = NullableModelMultipleChoiceFilter(
- queryset=Tenant.objects.all(),
- to_field_name='slug',
- label='Tenant (slug)',
- )
- platform_id = NullableModelMultipleChoiceFilter(
- queryset=Platform.objects.all(),
- label='Platform (ID)',
- )
- platform = NullableModelMultipleChoiceFilter(
- name='platform',
- queryset=Platform.objects.all(),
- to_field_name='slug',
- label='Platform (slug)',
- )
- class Meta:
- model = VirtualMachine
- fields = ['name', 'cluster']
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(comments__icontains=value)
- )
|