22from dcim .choices import SiteStatusChoices
33from dcim .models import Region , Site , SiteGroup
44from django import forms
5+ from extras .models import Tag
56from tenancy .models import Tenant
67from utilities .forms .fields import DynamicModelMultipleChoiceField
78
@@ -17,11 +18,11 @@ class MapFilterForm(forms.Form):
1718
1819 Field naming convention:
1920 - Shared spatial fields: native filterset names (region_id, site_group_id, at_any_site)
20- - Site-specific fields: site_ prefix (site_status, site_tenant_id)
21- - Segment-specific fields: segment_ prefix (segment_status, segment_type, segment_provider_id)
21+ - Site-specific fields: site_ prefix (site_status, site_tenant_id, site_tag_id)
22+ - Segment-specific fields: segment_ prefix (segment_status, segment_type, segment_provider_id, segment_tag_id)
23+ - Circuit-specific fields: circuit_ prefix (circuit_status, circuit_type_id, circuit_provider_id, circuit_tag_id)
2224
23- The view's _extract_*_params() helpers strip/remap these prefixes before
24- passing GET params to each filterset.
25+ All filtering is performed client-side in object_map.js using the JSON data blob.
2526 """
2627
2728 # -------------------------------------------------------------------------
@@ -50,13 +51,17 @@ class MapFilterForm(forms.Form):
5051 choices = SiteStatusChoices ,
5152 required = False ,
5253 label = "Status" ,
53- widget = forms .SelectMultiple (attrs = {"class" : "form-select form-select-sm" , "size" : "1" }),
5454 )
5555 site_tenant_id = DynamicModelMultipleChoiceField (
5656 queryset = Tenant .objects .all (),
5757 required = False ,
5858 label = "Tenant" ,
5959 )
60+ site_tag_id = DynamicModelMultipleChoiceField (
61+ queryset = Tag .objects .all (),
62+ required = False ,
63+ label = "Tag" ,
64+ )
6065
6166 # -------------------------------------------------------------------------
6267 # Segment filters
@@ -65,19 +70,22 @@ class MapFilterForm(forms.Form):
6570 choices = StatusChoices ,
6671 required = False ,
6772 label = "Status" ,
68- widget = forms .SelectMultiple (attrs = {"class" : "form-select form-select-sm" , "size" : "1" }),
6973 )
7074 segment_type = forms .MultipleChoiceField (
7175 choices = SegmentTypeChoices ,
7276 required = False ,
7377 label = "Type" ,
74- widget = forms .SelectMultiple (attrs = {"class" : "form-select form-select-sm" , "size" : "1" }),
7578 )
7679 segment_provider_id = DynamicModelMultipleChoiceField (
7780 queryset = Provider .objects .all (),
7881 required = False ,
7982 label = "Provider" ,
8083 )
84+ segment_tag_id = DynamicModelMultipleChoiceField (
85+ queryset = Tag .objects .all (),
86+ required = False ,
87+ label = "Tag" ,
88+ )
8189
8290 # -------------------------------------------------------------------------
8391 # Circuit filters
@@ -86,7 +94,6 @@ class MapFilterForm(forms.Form):
8694 choices = [], # populated in __init__ to avoid import-time issues
8795 required = False ,
8896 label = "Status" ,
89- widget = forms .SelectMultiple (attrs = {"class" : "form-select form-select-sm" , "size" : "1" }),
9097 )
9198 circuit_type_id = DynamicModelMultipleChoiceField (
9299 queryset = CircuitType .objects .all (),
@@ -98,6 +105,11 @@ class MapFilterForm(forms.Form):
98105 required = False ,
99106 label = "Provider" ,
100107 )
108+ circuit_tag_id = DynamicModelMultipleChoiceField (
109+ queryset = Tag .objects .all (),
110+ required = False ,
111+ label = "Tag" ,
112+ )
101113
102114 def __init__ (self , * args , ** kwargs ):
103115 super ().__init__ (* args , ** kwargs )
0 commit comments