| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- import django_filters
- from django.db.models import Q
- from django.utils.translation import gettext as _
- from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet
- from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
- from .models import *
- __all__ = (
- 'ContactAssignmentFilterSet',
- 'ContactFilterSet',
- 'ContactGroupFilterSet',
- 'ContactModelFilterSet',
- 'ContactRoleFilterSet',
- 'TenancyFilterSet',
- 'TenantFilterSet',
- 'TenantGroupFilterSet',
- )
- #
- # Contacts
- #
- class ContactGroupFilterSet(OrganizationalModelFilterSet):
- parent_id = django_filters.ModelMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- label=_('Parent contact group (ID)'),
- )
- parent = django_filters.ModelMultipleChoiceFilter(
- field_name='parent__slug',
- queryset=ContactGroup.objects.all(),
- to_field_name='slug',
- label=_('Parent contact group (slug)'),
- )
- ancestor_id = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='parent',
- lookup_expr='in',
- label=_('Contact group (ID)'),
- )
- ancestor = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='parent',
- lookup_expr='in',
- to_field_name='slug',
- label=_('Contact group (slug)'),
- )
- class Meta:
- model = ContactGroup
- fields = ('id', 'name', 'slug', 'description')
- class ContactRoleFilterSet(OrganizationalModelFilterSet):
- class Meta:
- model = ContactRole
- fields = ('id', 'name', 'slug', 'description')
- class ContactFilterSet(NetBoxModelFilterSet):
- group_id = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='group',
- lookup_expr='in',
- label=_('Contact group (ID)'),
- )
- group = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='group',
- lookup_expr='in',
- to_field_name='slug',
- label=_('Contact group (slug)'),
- )
- class Meta:
- model = Contact
- fields = ('id', 'name', 'title', 'phone', 'email', 'address', 'link', 'description')
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(title__icontains=value) |
- Q(phone__icontains=value) |
- Q(email__icontains=value) |
- Q(address__icontains=value) |
- Q(link__icontains=value) |
- Q(description__icontains=value) |
- Q(comments__icontains=value)
- )
- class ContactAssignmentFilterSet(NetBoxModelFilterSet):
- q = django_filters.CharFilter(
- method='search',
- label=_('Search'),
- )
- object_type = ContentTypeFilter()
- contact_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Contact.objects.all(),
- label=_('Contact (ID)'),
- )
- group_id = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='contact__group',
- lookup_expr='in',
- label=_('Contact group (ID)'),
- )
- group = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='contact__group',
- lookup_expr='in',
- to_field_name='slug',
- label=_('Contact group (slug)'),
- )
- role_id = django_filters.ModelMultipleChoiceFilter(
- queryset=ContactRole.objects.all(),
- label=_('Contact role (ID)'),
- )
- role = django_filters.ModelMultipleChoiceFilter(
- field_name='role__slug',
- queryset=ContactRole.objects.all(),
- to_field_name='slug',
- label=_('Contact role (slug)'),
- )
- class Meta:
- model = ContactAssignment
- fields = ('id', 'object_type_id', 'object_id', 'priority')
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(contact__name__icontains=value) |
- Q(role__name__icontains=value)
- )
- class ContactModelFilterSet(django_filters.FilterSet):
- contact = django_filters.ModelMultipleChoiceFilter(
- field_name='contacts__contact',
- queryset=Contact.objects.all(),
- label=_('Contact'),
- )
- contact_role = django_filters.ModelMultipleChoiceFilter(
- field_name='contacts__role',
- queryset=ContactRole.objects.all(),
- label=_('Contact Role')
- )
- contact_group = TreeNodeMultipleChoiceFilter(
- queryset=ContactGroup.objects.all(),
- field_name='contacts__contact__group',
- lookup_expr='in',
- label=_('Contact group'),
- )
- #
- # Tenancy
- #
- class TenantGroupFilterSet(OrganizationalModelFilterSet):
- parent_id = django_filters.ModelMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- label=_('Parent tenant group (ID)'),
- )
- parent = django_filters.ModelMultipleChoiceFilter(
- field_name='parent__slug',
- queryset=TenantGroup.objects.all(),
- to_field_name='slug',
- label=_('Parent tenant group (slug)'),
- )
- ancestor_id = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='parent',
- lookup_expr='in',
- label=_('Tenant group (ID)'),
- )
- ancestor = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='parent',
- lookup_expr='in',
- to_field_name='slug',
- label=_('Tenant group (slug)'),
- )
- class Meta:
- model = TenantGroup
- fields = ('id', 'name', 'slug', 'description')
- class TenantFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
- group_id = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='group',
- lookup_expr='in',
- label=_('Tenant group (ID)'),
- )
- group = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='group',
- lookup_expr='in',
- to_field_name='slug',
- label=_('Tenant group (slug)'),
- )
- class Meta:
- model = Tenant
- fields = ('id', 'name', 'slug', 'description')
- def search(self, queryset, name, value):
- if not value.strip():
- return queryset
- return queryset.filter(
- Q(name__icontains=value) |
- Q(slug__icontains=value) |
- Q(description__icontains=value) |
- Q(comments__icontains=value)
- )
- class TenancyFilterSet(django_filters.FilterSet):
- """
- An inheritable FilterSet for models which support Tenant assignment.
- """
- tenant_group_id = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='tenant__group',
- lookup_expr='in',
- label=_('Tenant Group (ID)'),
- )
- tenant_group = TreeNodeMultipleChoiceFilter(
- queryset=TenantGroup.objects.all(),
- field_name='tenant__group',
- to_field_name='slug',
- lookup_expr='in',
- label=_('Tenant Group (slug)'),
- )
- tenant_id = django_filters.ModelMultipleChoiceFilter(
- queryset=Tenant.objects.all(),
- label=_('Tenant (ID)'),
- )
- tenant = django_filters.ModelMultipleChoiceFilter(
- queryset=Tenant.objects.all(),
- field_name='tenant__slug',
- to_field_name='slug',
- label=_('Tenant (slug)'),
- )
|