diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 4099a6027..8714a03d9 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -1263,11 +1263,46 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): 'group_id': '$site_group', } ) + location = DynamicModelChoiceField( + queryset=Location.objects.all(), + required=False, + null_option='None', + query_params={ + 'site_id': '$site', + } + ) + rack = DynamicModelChoiceField( + queryset=Rack.objects.all(), + required=False, + null_option='None', + query_params={ + 'site_id': '$site', + 'location_id': '$location', + } + ) + group_scope = forms.ChoiceField( + choices=( + ('', ''), + ('dcim.region', 'Region'), + ('dcim.sitegroup', 'Site group'), + ('dcim.site', 'Site'), + ('dcim.location', 'Location'), + ('dcim.rack', 'Rack'), + ), + required=False, + widget=StaticSelect2, + label='Group scope' + ) group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, query_params={ - 'site_id': '$site' + 'scope_type': '$group_scope', + 'region': '$region', + 'sitegroup': '$site_group', + 'site': '$site', + 'location': '$location', + 'rack': '$rack', } ) role = DynamicModelChoiceField( @@ -1286,7 +1321,7 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ] fieldsets = ( ('VLAN', ('vid', 'name', 'status', 'role', 'description', 'tags')), - ('Assignment', ('region', 'site_group', 'site', 'group')), + ('Assignment', ('region', 'site_group', 'site', 'location', 'rack', 'group_scope', 'group')), ('Tenancy', ('tenant_group', 'tenant')), ) help_texts = {