1
1
"""
2
2
Filters enable users to request only a specific subset of objects matching a query;
3
- when filtering the sites list by status or region, for instance.
3
+ when filtering the site list by status or region, for instance.
4
4
"""
5
+
5
6
import django_filters
6
7
from dcim .models import Device , Interface , Region , Site , SiteGroup , VirtualChassis
7
8
from django .db .models import Q
9
+ from django .utils .translation import gettext_lazy as _
10
+ from ipam .models import Prefix
8
11
from netbox .filtersets import NetBoxModelFilterSet
9
12
from virtualization .models import VirtualMachine , VMInterface
10
13
14
+ from .choices import ACLTypeChoices
11
15
from .models import AccessList , ACLExtendedRule , ACLInterfaceAssignment , ACLStandardRule
12
16
13
17
__all__ = (
@@ -22,6 +26,7 @@ class AccessListFilterSet(NetBoxModelFilterSet):
22
26
"""
23
27
Define the filter set for the django model AccessList.
24
28
"""
29
+
25
30
region = django_filters .ModelMultipleChoiceFilter (
26
31
field_name = "device__site__region" ,
27
32
queryset = Region .objects .all (),
@@ -102,13 +107,13 @@ def search(self, queryset, name, value):
102
107
Override the default search behavior for the django model.
103
108
"""
104
109
query = (
105
- Q (name__icontains = value )
106
- | Q (device__name__icontains = value )
107
- | Q (virtual_chassis__name__icontains = value )
108
- | Q (virtual_machine__name__icontains = value )
109
- | Q (type__icontains = value )
110
- | Q (default_action__icontains = value )
111
- | Q (comments__icontains = value )
110
+ Q (name__icontains = value )
111
+ | Q (device__name__icontains = value )
112
+ | Q (virtual_chassis__name__icontains = value )
113
+ | Q (virtual_machine__name__icontains = value )
114
+ | Q (type__icontains = value )
115
+ | Q (default_action__icontains = value )
116
+ | Q (comments__icontains = value )
112
117
)
113
118
return queryset .filter (query )
114
119
@@ -118,6 +123,16 @@ class ACLInterfaceAssignmentFilterSet(NetBoxModelFilterSet):
118
123
Define the filter set for the django model ACLInterfaceAssignment.
119
124
"""
120
125
126
+ access_list = django_filters .ModelMultipleChoiceFilter (
127
+ queryset = AccessList .objects .all (),
128
+ to_field_name = "name" ,
129
+ label = _ ("Access List (name)" ),
130
+ )
131
+ access_list_id = django_filters .ModelMultipleChoiceFilter (
132
+ queryset = AccessList .objects .all (),
133
+ to_field_name = "id" ,
134
+ label = _ ("Access List (ID)" ),
135
+ )
121
136
interface = django_filters .ModelMultipleChoiceFilter (
122
137
field_name = "interface__name" ,
123
138
queryset = Interface .objects .all (),
@@ -175,6 +190,32 @@ class ACLStandardRuleFilterSet(NetBoxModelFilterSet):
175
190
Define the filter set for the django model ACLStandardRule.
176
191
"""
177
192
193
+ # Access List
194
+ access_list = django_filters .ModelMultipleChoiceFilter (
195
+ queryset = AccessList .objects .all (),
196
+ to_field_name = "name" ,
197
+ label = _ ("Access List (name)" ),
198
+ )
199
+ access_list_id = django_filters .ModelMultipleChoiceFilter (
200
+ queryset = AccessList .objects .all (),
201
+ to_field_name = "id" ,
202
+ label = _ ("Access List (ID)" ),
203
+ )
204
+
205
+ # Source
206
+ source_prefix = django_filters .ModelMultipleChoiceFilter (
207
+ field_name = "source_prefix" ,
208
+ queryset = Prefix .objects .all (),
209
+ to_field_name = "name" ,
210
+ label = _ ("Source Prefix (name)" ),
211
+ )
212
+ source_prefix_id = django_filters .ModelMultipleChoiceFilter (
213
+ field_name = "source_prefix" ,
214
+ queryset = Prefix .objects .all (),
215
+ to_field_name = "id" ,
216
+ label = _ ("Source Prefix (ID)" ),
217
+ )
218
+
178
219
class Meta :
179
220
"""
180
221
Associates the django model ACLStandardRule & fields to the filter set.
@@ -200,6 +241,46 @@ class ACLExtendedRuleFilterSet(NetBoxModelFilterSet):
200
241
Define the filter set for the django model ACLExtendedRule.
201
242
"""
202
243
244
+ # Access List
245
+ access_list = django_filters .ModelMultipleChoiceFilter (
246
+ queryset = AccessList .objects .filter (type = ACLTypeChoices .TYPE_EXTENDED ),
247
+ to_field_name = "name" ,
248
+ label = _ ("Access List (name)" ),
249
+ )
250
+ access_list_id = django_filters .ModelMultipleChoiceFilter (
251
+ queryset = AccessList .objects .filter (type = ACLTypeChoices .TYPE_EXTENDED ),
252
+ to_field_name = "id" ,
253
+ label = _ ("Access List (ID)" ),
254
+ )
255
+
256
+ # Source
257
+ source_prefix = django_filters .ModelMultipleChoiceFilter (
258
+ field_name = "source_prefix" ,
259
+ queryset = Prefix .objects .all (),
260
+ to_field_name = "name" ,
261
+ label = _ ("Source Prefix (name)" ),
262
+ )
263
+ source_prefix_id = django_filters .ModelMultipleChoiceFilter (
264
+ field_name = "source_prefix" ,
265
+ queryset = Prefix .objects .all (),
266
+ to_field_name = "id" ,
267
+ label = _ ("Source Prefix (ID)" ),
268
+ )
269
+
270
+ # Destination
271
+ destination_prefix = django_filters .ModelMultipleChoiceFilter (
272
+ field_name = "destination_prefix" ,
273
+ queryset = Prefix .objects .all (),
274
+ to_field_name = "name" ,
275
+ label = _ ("Destination Prefix (name)" ),
276
+ )
277
+ destination_prefix_id = django_filters .ModelMultipleChoiceFilter (
278
+ field_name = "destination_prefix" ,
279
+ queryset = Prefix .objects .all (),
280
+ to_field_name = "id" ,
281
+ label = _ ("Destination Prefix (ID)" ),
282
+ )
283
+
203
284
class Meta :
204
285
"""
205
286
Associates the django model ACLExtendedRule & fields to the filter set.
@@ -213,9 +294,9 @@ def search(self, queryset, name, value):
213
294
Override the default search behavior for the django model.
214
295
"""
215
296
query = (
216
- Q (access_list__name__icontains = value )
217
- | Q (index__icontains = value )
218
- | Q (action__icontains = value )
219
- | Q (protocol__icontains = value )
297
+ Q (access_list__name__icontains = value )
298
+ | Q (index__icontains = value )
299
+ | Q (action__icontains = value )
300
+ | Q (protocol__icontains = value )
220
301
)
221
302
return queryset .filter (query )
0 commit comments