This repository has been archived by the owner on Mar 29, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
/
filters.py
67 lines (51 loc) · 2.09 KB
/
filters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import django_filters
from django.db.models import Q
from dcim.models import Device, DeviceType, Manufacturer
from utilities.filters import NameSlugSearchFilterSet
from .models import PDUConfig, PDUStatus
class PDUConfigFilter(NameSlugSearchFilterSet):
"""Filter PDUConfig instances."""
q = django_filters.CharFilter(method="search", label="Search",)
manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name="device_type__manufacturer__slug",
queryset=Manufacturer.objects.filter(device_types__poweroutlet_templates__isnull=False).distinct(),
to_field_name="slug",
label="Manufacturer",
)
device_type = django_filters.ModelMultipleChoiceFilter(
field_name="device_type__slug",
queryset=DeviceType.objects.filter(poweroutlet_templates__isnull=False).distinct(),
to_field_name="slug",
label="Device Type",
)
class Meta:
model = PDUConfig
fields = ["id", "device_type", "manufacturer"]
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
qs_filter = (
Q(id__icontains=value)
| Q(device_type__slug__icontains=value)
| Q(device_type__manufacturer__slug__icontains=value)
)
return queryset.filter(qs_filter)
class PDUStatusFilter(NameSlugSearchFilterSet):
"""Filter PDUStatus instances."""
q = django_filters.CharFilter(method="search", label="Search",)
device = django_filters.ModelMultipleChoiceFilter(
field_name="device__name",
queryset=Device.objects.filter(device_type__poweroutlet_templates__isnull=False).distinct(),
to_field_name="name",
label="Device",
)
class Meta:
model = PDUStatus
fields = ["id", "device"]
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
qs_filter = Q(id__icontains=value) | Q(device__name__icontains=value)
return queryset.filter(qs_filter)