Skip to content

Commit f43974b

Browse files
committed
feat(forms): Update filter forms with fieldset restructuring
Reorganizes fieldsets in filter forms for better grouping and clarity. Adds labels and updates field names to align with conventions. Fixes #243
1 parent e0a2b2b commit f43974b

File tree

1 file changed

+148
-87
lines changed

1 file changed

+148
-87
lines changed

netbox_acls/forms/filtersets.py

Lines changed: 148 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
"""
22
Defines each django model's GUI filter/search options.
33
"""
4-
from django.utils.translation import gettext_lazy as _
4+
55
from dcim.models import Device, Interface, Region, Site, SiteGroup, VirtualChassis
66
from django import forms
7-
from django.utils.translation import gettext as _
7+
from django.utils.translation import gettext_lazy as _
88
from ipam.models import Prefix
99
from netbox.forms import NetBoxModelFilterSetForm
10-
from utilities.forms.rendering import FieldSet
1110
from utilities.forms.fields import (
1211
DynamicModelChoiceField,
1312
DynamicModelMultipleChoiceField,
1413
TagFilterField,
1514
)
15+
from utilities.forms.rendering import FieldSet
1616
from utilities.forms.utils import add_blank_choice
1717
from virtualization.models import VirtualMachine, VMInterface
1818

19-
2019
from ..choices import (
2120
ACLActionChoices,
2221
ACLAssignmentDirectionChoices,
@@ -45,124 +44,155 @@ class AccessListFilterForm(NetBoxModelFilterSetForm):
4544
"""
4645

4746
model = AccessList
48-
region = DynamicModelChoiceField(
47+
fieldsets = (
48+
FieldSet("q", "tag", name=None),
49+
FieldSet("type", "default_action", name=_("ACL Details")),
50+
FieldSet("region_id", "site_group_id", "site_id", "device_id", name=_("Device Details")),
51+
FieldSet("virtual_chassis_id", name=_("Virtual Chassis Details")),
52+
FieldSet("virtual_machine_id", name=_("Virtual Machine Details")),
53+
)
54+
55+
# ACL
56+
type = forms.ChoiceField(
57+
choices=add_blank_choice(ACLTypeChoices),
58+
required=False,
59+
)
60+
default_action = forms.ChoiceField(
61+
choices=add_blank_choice(ACLActionChoices),
62+
required=False,
63+
label=_("Default Action"),
64+
)
65+
66+
# Device selector
67+
region_id = DynamicModelChoiceField(
4968
queryset=Region.objects.all(),
5069
required=False,
70+
label=_("Region"),
5171
)
52-
site_group = DynamicModelChoiceField(
72+
site_group_id = DynamicModelChoiceField(
5373
queryset=SiteGroup.objects.all(),
5474
required=False,
55-
label="Site Group",
75+
label=_("Site Group"),
5676
)
57-
site = DynamicModelChoiceField(
77+
site_id = DynamicModelChoiceField(
5878
queryset=Site.objects.all(),
5979
required=False,
60-
query_params={"region_id": "$region", "group_id": "$site_group"},
80+
query_params={
81+
"region_id": "$region_id",
82+
"group_id": "$site_group_id",
83+
},
84+
label=_("Site"),
6185
)
6286
device_id = DynamicModelChoiceField(
6387
queryset=Device.objects.all(),
6488
query_params={
65-
"region_id": "$region",
66-
"group_id": "$site_group",
67-
"site_id": "$site",
89+
"region_id": "$region_id",
90+
"group_id": "$site_group_id",
91+
"site_id": "$site_id",
6892
},
6993
required=False,
70-
label=_("Device",),
71-
)
72-
virtual_machine_id = DynamicModelChoiceField(
73-
queryset=VirtualMachine.objects.all(),
74-
required=False,
75-
label=_("Virtual Machine",)
94+
label=_("Device"),
7695
)
96+
97+
# Virtual Chassis selector
7798
virtual_chassis_id = DynamicModelChoiceField(
7899
queryset=VirtualChassis.objects.all(),
79100
required=False,
80-
label=_("Virtual Chassis",)
101+
label=_("Virtual Chassis"),
81102
)
82-
type = forms.ChoiceField(
83-
choices=add_blank_choice(ACLTypeChoices),
84-
required=False,
85-
)
86-
default_action = forms.ChoiceField(
87-
choices=add_blank_choice(ACLActionChoices),
103+
104+
# Virtual Machine selector
105+
virtual_machine_id = DynamicModelChoiceField(
106+
queryset=VirtualMachine.objects.all(),
88107
required=False,
89-
label="Default Action",
108+
label=_("Virtual Machine"),
90109
)
110+
111+
# Tag selector
91112
tag = TagFilterField(model)
92113

93-
fieldsets = (
94-
FieldSet("region", "site_group", "site", "device_id", "virtual_chassis_id", "virtual_machine_id", name=_("Host Details")),
95-
FieldSet("type", "default_action", name=_('ACL Details')),
96-
FieldSet("q", "tag",name=None)
97-
)
98114

99115
class ACLInterfaceAssignmentFilterForm(NetBoxModelFilterSetForm):
100116
"""
101117
GUI filter form to search the django AccessList model.
102118
"""
103119

104120
model = ACLInterfaceAssignment
105-
region = DynamicModelChoiceField(
121+
fieldsets = (
122+
FieldSet("q", "tag", name=None),
123+
FieldSet("access_list_id", "direction", name=_("ACL Details")),
124+
FieldSet("region_id", "site_group_id", "site_id", "device_id", "interface_id", name=_("Device Details")),
125+
FieldSet("virtual_machine_id", "vminterface_id", name=_("Virtual Machine Details")),
126+
)
127+
128+
# ACL selector
129+
access_list_id = DynamicModelChoiceField(
130+
queryset=AccessList.objects.all(),
131+
required=False,
132+
label=_("Access List"),
133+
)
134+
direction = forms.ChoiceField(
135+
choices=add_blank_choice(ACLAssignmentDirectionChoices),
136+
required=False,
137+
label=_("Direction"),
138+
)
139+
140+
# Device Interface selector
141+
region_id = DynamicModelChoiceField(
106142
queryset=Region.objects.all(),
107143
required=False,
144+
label=_("Region"),
108145
)
109-
site_group = DynamicModelChoiceField(
146+
site_group_id = DynamicModelChoiceField(
110147
queryset=SiteGroup.objects.all(),
111148
required=False,
112-
label="Site Group",
149+
label=_("Site Group"),
113150
)
114-
site = DynamicModelChoiceField(
151+
site_id = DynamicModelChoiceField(
115152
queryset=Site.objects.all(),
116153
required=False,
117-
query_params={"region_id": "$region", "group_id": "$site_group"},
154+
query_params={
155+
"region_id": "$region_id",
156+
"group_id": "$site_group_id",
157+
},
158+
label=_("Site"),
118159
)
119-
device = DynamicModelChoiceField(
160+
device_id = DynamicModelChoiceField(
120161
queryset=Device.objects.all(),
121162
query_params={
122-
"region_id": "$region",
123-
"group_id": "$site_group",
124-
"site_id": "$site",
163+
"region_id": "$region_id",
164+
"group_id": "$site_group_id",
165+
"site_id": "$site_id",
125166
},
126167
required=False,
168+
label=_("Device"),
127169
)
128-
interface = DynamicModelChoiceField(
170+
interface_id = DynamicModelChoiceField(
129171
queryset=Interface.objects.all(),
130172
required=False,
131173
query_params={
132-
"device_id": "$device",
174+
"device_id": "$device_id",
133175
},
176+
label=_("Device Interface"),
134177
)
135-
virtual_machine = DynamicModelChoiceField(
178+
179+
# Virtual Machine Interface selector
180+
virtual_machine_id = DynamicModelChoiceField(
136181
queryset=VirtualMachine.objects.all(),
137182
required=False,
138-
label="Virtual Machine",
183+
label=_("Virtual Machine"),
139184
)
140-
vminterface = DynamicModelChoiceField(
185+
vminterface_id = DynamicModelChoiceField(
141186
queryset=VMInterface.objects.all(),
142187
required=False,
143188
query_params={
144-
"virtual_machine_id": "$virtual_machine",
145-
},
146-
label="Interface",
147-
)
148-
access_list = DynamicModelChoiceField(
149-
queryset=AccessList.objects.all(),
150-
query_params={
151-
"assigned_object": "$device",
189+
"virtual_machine_id": "$virtual_machine_id",
152190
},
153-
label="Access List",
191+
label=_("VM Interface"),
154192
)
155-
direction = forms.ChoiceField(
156-
choices=add_blank_choice(ACLAssignmentDirectionChoices),
157-
required=False,
158-
)
159-
tag = TagFilterField(model)
160193

161-
# fieldsets = (
162-
# (None, ('q', 'tag')),
163-
# ('Host Details', ('region', 'site_group', 'site', 'device')),
164-
# ('ACL Details', ('type', 'default_action')),
165-
# )
194+
# Tag selector
195+
tag = TagFilterField(model)
166196

167197

168198
class ACLStandardRuleFilterForm(NetBoxModelFilterSetForm):
@@ -171,59 +201,90 @@ class ACLStandardRuleFilterForm(NetBoxModelFilterSetForm):
171201
"""
172202

173203
model = ACLStandardRule
174-
tag = TagFilterField(model)
175-
access_list = DynamicModelMultipleChoiceField(
204+
fieldsets = (
205+
FieldSet("q", "tag", name=None),
206+
FieldSet("access_list_id", "index", "action", name=_("ACL Details")),
207+
FieldSet("source_prefix_id", name=_("Source Details")),
208+
)
209+
210+
access_list_id = DynamicModelMultipleChoiceField(
176211
queryset=AccessList.objects.all(),
212+
query_params={
213+
"type": ACLTypeChoices.TYPE_STANDARD,
214+
},
177215
required=False,
216+
label=_("Access List"),
178217
)
179-
source_prefix = DynamicModelMultipleChoiceField(
180-
queryset=Prefix.objects.all(),
218+
index = forms.IntegerField(
181219
required=False,
182-
label="Source Prefix",
220+
label=_("Index"),
183221
)
184222
action = forms.ChoiceField(
185223
choices=add_blank_choice(ACLRuleActionChoices),
186224
required=False,
225+
label=_("Action"),
187226
)
188227

189-
fieldsets = (
190-
FieldSet("access_list", "action", "source_prefix", name=_('Rule Details')),
191-
FieldSet("q", "tag",name=None)
228+
# Source selectors
229+
source_prefix_id = DynamicModelMultipleChoiceField(
230+
queryset=Prefix.objects.all(),
231+
required=False,
232+
label=_("Source Prefix"),
192233
)
234+
235+
# Tag selector
236+
tag = TagFilterField(model)
237+
238+
193239
class ACLExtendedRuleFilterForm(NetBoxModelFilterSetForm):
194240
"""
195241
GUI filter form to search the django ACLExtendedRule model.
196242
"""
197243

198244
model = ACLExtendedRule
199-
index = forms.IntegerField(
200-
required=False,
245+
fieldsets = (
246+
FieldSet("q", "tag", name=None),
247+
FieldSet("access_list_id", "index", "action", "protocol", name=_("ACL Details")),
248+
FieldSet("source_prefix_id", name=_("Source Details")),
249+
FieldSet("destination_prefix_id", name=_("Destination Details")),
201250
)
202-
tag = TagFilterField(model)
203-
access_list = DynamicModelMultipleChoiceField(
251+
252+
access_list_id = DynamicModelMultipleChoiceField(
204253
queryset=AccessList.objects.all(),
254+
query_params={
255+
"type": ACLTypeChoices.TYPE_EXTENDED,
256+
},
257+
required=False,
258+
label=_("Access List"),
259+
)
260+
index = forms.IntegerField(
205261
required=False,
262+
label=_("Index"),
206263
)
207264
action = forms.ChoiceField(
208265
choices=add_blank_choice(ACLRuleActionChoices),
209266
required=False,
267+
label=_("Action"),
210268
)
211-
source_prefix = DynamicModelMultipleChoiceField(
212-
queryset=Prefix.objects.all(),
269+
protocol = forms.ChoiceField(
270+
choices=add_blank_choice(ACLProtocolChoices),
213271
required=False,
214-
label="Source Prefix",
272+
label=_("Protocol"),
215273
)
216-
desintation_prefix = DynamicModelMultipleChoiceField(
274+
275+
# Source selectors
276+
source_prefix_id = DynamicModelMultipleChoiceField(
217277
queryset=Prefix.objects.all(),
218278
required=False,
219-
label="Destination Prefix",
279+
label=_("Source Prefix"),
220280
)
221-
protocol = forms.ChoiceField(
222-
choices=add_blank_choice(ACLProtocolChoices),
281+
282+
# Destination selectors
283+
destination_prefix_id = DynamicModelMultipleChoiceField(
284+
queryset=Prefix.objects.all(),
223285
required=False,
286+
label=_("Destination Prefix"),
224287
)
225288

226-
fieldsets = (
227-
FieldSet("access_list", "action", "source_prefix", "desintation_prefix", "protocol", name=_('Rule Details')),
228-
FieldSet("q", "tag",name=None)
229-
)
289+
# Tag selector
290+
tag = TagFilterField(model)

0 commit comments

Comments
 (0)