From 809de8683b1d65003e421e6b424e5854a7b06b90 Mon Sep 17 00:00:00 2001 From: thatmattlove Date: Sat, 28 Aug 2021 09:34:24 -0700 Subject: [PATCH] Revert changes from 89b7f3f --- netbox/circuits/forms.py | 30 +- netbox/dcim/forms.py | 596 +++++++++++++++---------------- netbox/extras/scripts.py | 5 +- netbox/ipam/forms.py | 154 ++++---- netbox/tenancy/forms.py | 12 +- netbox/utilities/forms/fields.py | 13 +- netbox/virtualization/forms.py | 104 +++--- 7 files changed, 448 insertions(+), 466 deletions(-) diff --git a/netbox/circuits/forms.py b/netbox/circuits/forms.py index 201d1b203..56cd46d4a 100644 --- a/netbox/circuits/forms.py +++ b/netbox/circuits/forms.py @@ -131,10 +131,10 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'site_group_id', 'field_name': 'site_group_id'} - ], + query_params={ + 'region_id': '$region_id', + 'site_group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -405,9 +405,9 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte provider_network_id = DynamicModelMultipleChoiceField( queryset=ProviderNetwork.objects.all(), required=False, - filter_fields=[ - {'accessor': 'provider_id', 'field_name': 'provider_id'} - ], + query_params={ + 'provider_id': '$provider_id' + }, label=_('Provider network'), fetch_trigger='open' ) @@ -431,10 +431,10 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'site_group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'site_group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -467,10 +467,10 @@ class CircuitTerminationForm(BootstrapMixin, forms.ModelForm): ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'site_group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + }, required=False ) provider_network = DynamicModelChoiceField( diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index dcf3298f9..b69944cf6 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -84,29 +84,29 @@ class DeviceComponentFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) location_id = DynamicModelMultipleChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id', + }, label=_('Location'), fetch_trigger='open' ) device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - {'accessor': 'location_id', 'field_name': 'location_id'}, - ], + query_params={ + 'site_id': '$site_id', + 'location_id': '$location_id', + }, label=_('Device'), fetch_trigger='open' ) @@ -546,17 +546,17 @@ class LocationForm(BootstrapMixin, CustomFieldModelForm): ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) parent = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) slug = SlugField() @@ -600,9 +600,9 @@ class LocationBulkEditForm(BootstrapMixin, CustomFieldModelBulkEditForm): parent = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) description = forms.CharField( max_length=200, @@ -635,20 +635,20 @@ class LocationFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) parent_id = DynamicModelMultipleChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'site_id': '$site_id', + }, label=_('Parent'), fetch_trigger='open' ) @@ -717,17 +717,17 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + } ) role = DynamicModelChoiceField( queryset=RackRole.objects.all(), @@ -841,17 +841,17 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), @@ -943,9 +943,9 @@ class RackFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) @@ -953,9 +953,9 @@ class RackFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo queryset=Location.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Location'), fetch_trigger='open' ) @@ -1000,10 +1000,10 @@ class RackElevationFilterForm(RackFilterForm): queryset=Rack.objects.all(), label=_('Rack'), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - {'accessor': 'location_id', 'field_name': 'location_id'}, - ], + query_params={ + 'site_id': '$site_id', + 'location_id': '$location_id', + }, fetch_trigger='open' ) @@ -1032,26 +1032,26 @@ class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + }, fetch_trigger='open' ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + }, fetch_trigger='open' ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'location_id', 'field_name': 'location'}, - ], + query_params={ + 'site_id': '$site', + 'location_id': '$location', + }, fetch_trigger='open' ) units = NumericArrayField( @@ -1180,9 +1180,9 @@ class RackReservationFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMo site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) @@ -1402,9 +1402,9 @@ class ComponentTemplateCreateForm(BootstrapMixin, ComponentForm): ) device_type = DynamicModelChoiceField( queryset=DeviceType.objects.all(), - filter_fields=[ - {'accessor': 'manufacturer_id', 'field_name': 'manufacturer'}, - ] + query_params={ + 'manufacturer_id': '$manufacturer' + } ) description = forms.CharField( required=False @@ -2172,17 +2172,17 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + }, initial_params={ 'racks': '$rack' } @@ -2190,10 +2190,10 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'location_id', 'field_name': 'location'}, - ], + query_params={ + 'site_id': '$site', + 'location_id': '$location', + } ) position = forms.IntegerField( required=False, @@ -2217,9 +2217,9 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) device_type = DynamicModelChoiceField( queryset=DeviceType.objects.all(), - filter_fields=[ - {'accessor': 'manufacturer_id', 'field_name': 'manufacturer'}, - ], + query_params={ + 'manufacturer_id': '$manufacturer' + } ) device_role = DynamicModelChoiceField( queryset=DeviceRole.objects.all() @@ -2227,13 +2227,9 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): platform = DynamicModelChoiceField( queryset=Platform.objects.all(), required=False, - filter_fields=[ - { - 'accessor': 'manufacturer_id', - 'field_name': 'manufacturer', - 'include_null': True - } - ] + query_params={ + 'manufacturer_id': ['$manufacturer', 'null'] + } ) cluster_group = DynamicModelChoiceField( queryset=ClusterGroup.objects.all(), @@ -2246,9 +2242,9 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), required=False, - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'cluster_group'}, - ], + query_params={ + 'group_id': '$cluster_group' + } ) comments = CommentField() local_context_data = JSONField( @@ -2507,9 +2503,9 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk device_type = DynamicModelChoiceField( queryset=DeviceType.objects.all(), required=False, - filter_fields=[ - {'accessor': 'manufacturer_id', 'field_name': 'manufacturer'}, - ] + query_params={ + 'manufacturer_id': '$manufacturer' + } ) device_role = DynamicModelChoiceField( queryset=DeviceRole.objects.all(), @@ -2522,9 +2518,9 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), @@ -2588,10 +2584,10 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -2599,9 +2595,9 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt queryset=Location.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Location'), fetch_trigger='open' ) @@ -2609,10 +2605,10 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt queryset=Rack.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - {'accessor': 'location_id', 'field_name': 'location_id'}, - ], + query_params={ + 'site_id': '$site_id', + 'location_id': '$location_id', + }, label=_('Rack'), fetch_trigger='open' ) @@ -2631,9 +2627,9 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt device_type_id = DynamicModelMultipleChoiceField( queryset=DeviceType.objects.all(), required=False, - filter_fields=[ - {'accessor': 'manufacturer_id', 'field_name': 'manufacturer_id'}, - ], + query_params={ + 'manufacturer_id': '$manufacturer_id' + }, label=_('Model'), fetch_trigger='open' ) @@ -3286,9 +3282,9 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm): queryset=Interface.objects.all(), required=False, label='LAG interface', - filter_fields=[ - {'accessor': 'type', 'field_name': 'type', 'default_value': 'lag'}, - ] + query_params={ + 'type': 'lag', + } ) vlan_group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), @@ -3299,17 +3295,17 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm): queryset=VLAN.objects.all(), required=False, label='Untagged VLAN', - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'vlan_group'}, - ], + query_params={ + 'group_id': '$vlan_group', + } ) tagged_vlans = DynamicModelMultipleChoiceField( queryset=VLAN.objects.all(), required=False, label='Tagged VLANs', - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'vlan_group'}, - ], + query_params={ + 'group_id': '$vlan_group', + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -3365,17 +3361,17 @@ class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm): parent = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'device'}, - ], + query_params={ + 'device_id': '$device', + } ) lag = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'device'}, - {'accessor': 'type', 'field_name': 'type', 'default_value': 'lag'}, - ] + query_params={ + 'device_id': '$device', + 'type': 'lag', + } ) mac_address = forms.CharField( required=False, @@ -3452,9 +3448,9 @@ class InterfaceBulkEditForm( lag = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - filter_fields=[ - {'accessor': 'type', 'field_name': 'type', 'default_value': 'lag'}, - ], + query_params={ + 'type': 'lag', + } ) mgmt_only = forms.NullBooleanField( required=False, @@ -4022,9 +4018,9 @@ class InventoryItemForm(BootstrapMixin, CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=InventoryItem.objects.all(), required=False, - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'device'}, - ], + query_params={ + 'device_id': '$device' + } ) manufacturer = DynamicModelChoiceField( queryset=Manufacturer.objects.all(), @@ -4052,9 +4048,9 @@ class InventoryItemCreateForm(ComponentCreateForm): parent = DynamicModelChoiceField( queryset=InventoryItem.objects.all(), required=False, - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'device'}, - ] + query_params={ + 'device_id': '$device' + } ) part_id = forms.CharField( max_length=50, @@ -4194,39 +4190,39 @@ class ConnectCableToDeviceForm(BootstrapMixin, CustomFieldModelForm): queryset=Site.objects.all(), label='Site', required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'termination_b_region'}, - {'accessor': 'group_id', 'field_name': 'termination_b_site_group'}, - ], + query_params={ + 'region_id': '$termination_b_region', + 'group_id': '$termination_b_site_group', + } ) termination_b_location = DynamicModelChoiceField( queryset=Location.objects.all(), label='Location', required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - ] + query_params={ + 'site_id': '$termination_b_site' + } ) termination_b_rack = DynamicModelChoiceField( queryset=Rack.objects.all(), label='Rack', required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - {'accessor': 'location_id', 'field_name': 'termination_b_location'}, - ] + query_params={ + 'site_id': '$termination_b_site', + 'location_id': '$termination_b_location', + } ) termination_b_device = DynamicModelChoiceField( queryset=Device.objects.all(), label='Device', required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - {'accessor': 'location_id', 'field_name': 'termination_b_location'}, - {'accessor': 'rack_id', 'field_name': 'termination_b_rack'} - ] + query_params={ + 'site_id': '$termination_b_site', + 'location_id': '$termination_b_location', + 'rack_id': '$termination_b_rack', + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -4255,9 +4251,9 @@ class ConnectCableToConsolePortForm(ConnectCableToDeviceForm): queryset=ConsolePort.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ], + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4266,9 +4262,9 @@ class ConnectCableToConsoleServerPortForm(ConnectCableToDeviceForm): queryset=ConsoleServerPort.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ], + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4277,9 +4273,9 @@ class ConnectCableToPowerPortForm(ConnectCableToDeviceForm): queryset=PowerPort.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ], + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4288,9 +4284,9 @@ class ConnectCableToPowerOutletForm(ConnectCableToDeviceForm): queryset=PowerOutlet.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ] + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4299,10 +4295,10 @@ class ConnectCableToInterfaceForm(ConnectCableToDeviceForm): queryset=Interface.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - {'accessor': 'kind', 'field_name': 'kind', 'default_value': 'physical'} - ] + query_params={ + 'device_id': '$termination_b_device', + 'kind': 'physical', + } ) @@ -4311,9 +4307,9 @@ class ConnectCableToFrontPortForm(ConnectCableToDeviceForm): queryset=FrontPort.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ], + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4322,9 +4318,9 @@ class ConnectCableToRearPortForm(ConnectCableToDeviceForm): queryset=RearPort.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'termination_b_device'}, - ], + query_params={ + 'device_id': '$termination_b_device' + } ) @@ -4348,26 +4344,26 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, CustomFieldModelForm) queryset=Site.objects.all(), label='Site', required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'termination_b_region'}, - {'accessor': 'group_id', 'field_name': 'termination_b_site_group'}, - ], + query_params={ + 'region_id': '$termination_b_region', + 'group_id': '$termination_b_site_group', + } ) termination_b_circuit = DynamicModelChoiceField( queryset=Circuit.objects.all(), label='Circuit', - filter_fields=[ - {'accessor': 'provider_id', 'field_name': 'termination_b_provider'}, - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - ] + query_params={ + 'provider_id': '$termination_b_provider', + 'site_id': '$termination_b_site', + } ) termination_b_id = DynamicModelChoiceField( queryset=CircuitTermination.objects.all(), label='Side', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'circuit_id', 'field_name': 'termination_b_circuit'}, - ] + query_params={ + 'circuit_id': '$termination_b_circuit' + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -4401,35 +4397,35 @@ class ConnectCableToPowerFeedForm(BootstrapMixin, CustomFieldModelForm): queryset=Site.objects.all(), label='Site', required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'termination_b_region'}, - {'accessor': 'group_id', 'field_name': 'termination_b_site_group'}, - ], + query_params={ + 'region_id': '$termination_b_region', + 'group_id': '$termination_b_site_group', + } ) termination_b_location = DynamicModelChoiceField( queryset=Location.objects.all(), label='Location', required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - ] + query_params={ + 'site_id': '$termination_b_site' + } ) termination_b_powerpanel = DynamicModelChoiceField( queryset=PowerPanel.objects.all(), label='Power Panel', required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'termination_b_site'}, - {'accessor': 'location_id', 'field_name': 'termination_b_location'}, - ] + query_params={ + 'site_id': '$termination_b_site', + 'location_id': '$termination_b_location', + } ) termination_b_id = DynamicModelChoiceField( queryset=PowerFeed.objects.all(), label='Name', disabled_indicator='_occupied', - filter_fields=[ - {'accessor': 'power_panel_id', 'field_name': 'termination_b_powerpanel'}, - ] + query_params={ + 'power_panel_id': '$termination_b_powerpanel' + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -4640,9 +4636,9 @@ class CableFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) @@ -4657,9 +4653,9 @@ class CableFilterForm(BootstrapMixin, CustomFieldModelFilterForm): required=False, label=_('Rack'), null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, fetch_trigger='open' ) type = forms.MultipleChoiceField( @@ -4678,11 +4674,11 @@ class CableFilterForm(BootstrapMixin, CustomFieldModelFilterForm): device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - {'accessor': 'tenant_id', 'field_name': 'tenant_id'}, - {'accessor': 'rack_id', 'field_name': 'rack_id'}, - ], + query_params={ + 'site_id': '$site_id', + 'tenant_id': '$tenant_id', + 'rack_id': '$rack_id', + }, label=_('Device'), fetch_trigger='open' ) @@ -4703,18 +4699,18 @@ class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Device'), fetch_trigger='open' ) @@ -4730,18 +4726,18 @@ class PowerConnectionFilterForm(BootstrapMixin, forms.Form): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Device'), fetch_trigger='open' ) @@ -4757,18 +4753,18 @@ class InterfaceConnectionFilterForm(BootstrapMixin, forms.Form): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site_id'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Device'), fetch_trigger='open' ) @@ -4803,26 +4799,26 @@ class VirtualChassisCreateForm(BootstrapMixin, CustomFieldModelForm): site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) members = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'rack_id', 'field_name': 'rack'}, - ], + query_params={ + 'site_id': '$site', + 'rack_id': '$rack', + } ) initial_position = forms.IntegerField( initial=1, @@ -4955,30 +4951,26 @@ class VCMemberSelectForm(BootstrapMixin, forms.Form): site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) device = DynamicModelChoiceField( queryset=Device.objects.all(), - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'rack_id', 'field_name': 'rack'}, - { - 'accessor': 'virtual_chassis_id', - 'field_name': 'virtual_chassis_id', - 'default_value': None - }, - ] + query_params={ + 'site_id': '$site', + 'rack_id': '$rack', + 'virtual_chassis_id': 'null', + } ) def clean_device(self): @@ -5045,10 +5037,10 @@ class VirtualChassisFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -5076,17 +5068,17 @@ class PowerPanelForm(BootstrapMixin, CustomFieldModelForm): ) site = DynamicModelChoiceField( queryset=Site.objects.all(), - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -5151,17 +5143,17 @@ class PowerPanelBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModel site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) class Meta: @@ -5194,10 +5186,10 @@ class PowerPanelFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -5205,9 +5197,9 @@ class PowerPanelFilterForm(BootstrapMixin, CustomFieldModelFilterForm): queryset=Location.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Location'), fetch_trigger='open' ) @@ -5239,23 +5231,23 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): initial_params={ 'powerpanel': '$power_panel' }, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) power_panel = DynamicModelChoiceField( queryset=PowerPanel.objects.all(), - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + } ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + } ) comments = CommentField() tags = DynamicModelMultipleChoiceField( @@ -5443,9 +5435,9 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldModelFilterForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) @@ -5453,9 +5445,9 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldModelFilterForm): queryset=PowerPanel.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Power panel'), fetch_trigger='open' ) @@ -5463,9 +5455,9 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldModelFilterForm): queryset=Rack.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site_id' + }, label=_('Rack'), fetch_trigger='open' ) diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index 14fc59c72..156b88065 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -181,19 +181,16 @@ class ObjectVar(ScriptVariable): :param model: The NetBox model being referenced :param query_params: A dictionary of additional query parameters to attach when making REST API requests (optional) - :param filter_fields: A dictionary or list of dictionaries that define a related - field. Example: `{'accessor': 'group_id', 'field_name': 'tenant_group'}` (optional) :param null_option: The label to use as a "null" selection option (optional) """ form_field = DynamicModelChoiceField - def __init__(self, model, query_params=None, filter_fields=None, null_option=None, *args, **kwargs): + def __init__(self, model, query_params=None, null_option=None, *args, **kwargs): super().__init__(*args, **kwargs) self.field_attrs.update({ 'queryset': model.objects.all(), 'query_params': query_params, - 'filter_fields': filter_fields, 'null_option': null_option, }) diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index a883bab0f..f4977c9c3 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -441,19 +441,19 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) vlan_group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, label='VLAN group', null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + }, initial_params={ 'vlans': '$vlan' } @@ -462,10 +462,10 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=VLAN.objects.all(), required=False, label='VLAN', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'group_id', 'field_name': 'vlan_group'}, - ] + query_params={ + 'site_id': '$site', + 'group_id': '$vlan_group', + } ) role = DynamicModelChoiceField( queryset=Role.objects.all(), @@ -577,10 +577,10 @@ class PrefixBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), @@ -698,9 +698,9 @@ class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilter queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - ], + query_params={ + 'region_id': '$region_id' + }, label=_('Site'), fetch_trigger='open' ) @@ -886,9 +886,9 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): interface = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'device'}, - ], + query_params={ + 'device_id': '$device' + } ) virtual_machine = DynamicModelChoiceField( queryset=VirtualMachine.objects.all(), @@ -901,9 +901,9 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=VMInterface.objects.all(), required=False, label='Interface', - filter_fields=[ - {'accessor': 'virtual_machine_id', 'field_name': 'virtual_machine'}, - ] + query_params={ + 'virtual_machine_id': '$virtual_machine' + } ) vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), @@ -930,28 +930,28 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=Site.objects.all(), required=False, label='Site', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'nat_region'}, - {'accessor': 'group_id', 'field_name': 'nat_site_group'}, - ], + query_params={ + 'region_id': '$nat_region', + 'group_id': '$nat_site_group', + } ) nat_rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, label='Rack', null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ], + query_params={ + 'site_id': '$site' + } ) nat_device = DynamicModelChoiceField( queryset=Device.objects.all(), required=False, label='Device', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'rack_id', 'field_name': 'nat_rack'}, - ] + query_params={ + 'site_id': '$site', + 'rack_id': '$nat_rack', + } ) nat_cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), @@ -962,9 +962,9 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=VirtualMachine.objects.all(), required=False, label='Virtual Machine', - filter_fields=[ - {'accessor': 'cluster_id', 'field_name': 'nat_cluster'}, - ] + query_params={ + 'cluster_id': '$nat_cluster', + } ) nat_vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), @@ -975,11 +975,11 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=IPAddress.objects.all(), required=False, label='IP Address', - filter_fields=[ - {'accessor': 'device_id', 'field_name': 'nat_device'}, - {'accessor': 'virtual_machine_id', 'field_name': 'nat_virtual_machine'}, - {'accessor': 'vrf_id', 'field_name': 'nat_vrf'}, - ], + query_params={ + 'device_id': '$nat_device', + 'virtual_machine_id': '$nat_virtual_machine', + 'vrf_id': '$nat_vrf', + } ) primary_for_parent = forms.BooleanField( required=False, @@ -1367,10 +1367,10 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm): initial_params={ 'locations': '$location' }, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'sitegroup'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$sitegroup', + } ) location = DynamicModelChoiceField( queryset=Location.objects.all(), @@ -1378,17 +1378,17 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm): initial_params={ 'racks': '$rack' }, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site', + } ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'location_id', 'field_name': 'location'}, - ], + query_params={ + 'site_id': '$site', + 'location_id': '$location', + } ) clustergroup = DynamicModelChoiceField( queryset=ClusterGroup.objects.all(), @@ -1401,9 +1401,9 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm): cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), required=False, - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'clustergroup'}, - ], + query_params={ + 'group_id': '$clustergroup', + } ) slug = SlugField() @@ -1543,9 +1543,9 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, - filter_fields=[ - {'accessor': 'scope_type', 'field_name': 'scope_type'}, - ], + query_params={ + 'scope_type': '$scope_type', + }, label='VLAN Group' ) @@ -1570,10 +1570,10 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'sitegroup'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$sitegroup', + } ) # Other fields @@ -1659,17 +1659,17 @@ class VLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), @@ -1724,9 +1724,9 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - ], + query_params={ + 'region': '$region' + }, label=_('Site'), fetch_trigger='open' ) @@ -1734,9 +1734,9 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo queryset=VLANGroup.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - ], + query_params={ + 'region': '$region' + }, label=_('VLAN group'), fetch_trigger='open' ) diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index a7de9b46b..63dcdd468 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -170,9 +170,9 @@ class TenancyForm(forms.Form): tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), required=False, - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'tenant_group'} - ] + query_params={ + 'group_id': '$tenant_group' + } ) @@ -188,9 +188,9 @@ class TenancyFilterForm(forms.Form): queryset=Tenant.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'tenant_group'} - ], + query_params={ + 'group_id': '$tenant_group_id' + }, label=_('Tenant'), fetch_trigger='open' ) diff --git a/netbox/utilities/forms/fields.py b/netbox/utilities/forms/fields.py index ce924f75e..96af9a892 100644 --- a/netbox/utilities/forms/fields.py +++ b/netbox/utilities/forms/fields.py @@ -371,20 +371,17 @@ class DynamicModelChoiceMixin: choice (optional) :param str fetch_trigger: The event type which will cause the select element to fetch data from the API. Must be 'load', 'open', or 'collapse'. (optional) - :param filter_fields: A dictionary or list of dictionaries that define a related - field. Example: `{'accessor': 'group_id', 'field_name': 'tenant_group'}` (optional) """ filter = django_filters.ModelChoiceFilter widget = widgets.APISelect def __init__(self, query_params=None, initial_params=None, null_option=None, disabled_indicator=None, fetch_trigger=None, - filter_fields=[], *args, **kwargs): + *args, **kwargs): self.query_params = query_params or {} self.initial_params = initial_params or {} self.null_option = null_option self.disabled_indicator = disabled_indicator self.fetch_trigger = fetch_trigger - self.filter_fields = filter_fields # to_field_name is set by ModelChoiceField.__init__(), but we need to set it early for reference # by widget_attrs() @@ -412,12 +409,8 @@ class DynamicModelChoiceMixin: attrs['data-fetch-trigger'] = self.fetch_trigger # Attach any static query parameters - for key, value in self.query_params.items(): - widget.add_query_param(key, value) - - # Attach any dynamic query parameters - if self.filter_fields is not None and len(self.filter_fields) > 0: - widget.add_filter_fields(self.filter_fields) + if (len(self.query_params) > 0): + widget.add_query_params(self.query_params) return attrs diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 7fec55521..efb787eca 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -126,10 +126,10 @@ class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) comments = CommentField() tags = DynamicModelMultipleChoiceField( @@ -206,10 +206,10 @@ class ClusterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBul site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) comments = CommentField( widget=SmallTextarea, @@ -260,10 +260,10 @@ class ClusterFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'site_group_id', 'field_name': 'site_group'}, - ], + query_params={ + 'region_id': '$region_id', + 'site_group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -291,26 +291,26 @@ class ClusterAddDevicesForm(BootstrapMixin, forms.Form): site = DynamicModelChoiceField( queryset=Site.objects.all(), required=False, - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region'}, - {'accessor': 'group_id', 'field_name': 'site_group'}, - ] + query_params={ + 'region_id': '$region', + 'group_id': '$site_group', + } ) rack = DynamicModelChoiceField( queryset=Rack.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - ] + query_params={ + 'site_id': '$site' + } ) devices = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), - filter_fields=[ - {'accessor': 'site_id', 'field_name': 'site'}, - {'accessor': 'rack_id', 'field_name': 'rack'}, - {'accessor': 'cluster_id', 'field_name': 'cluster', 'default_value': None}, - ] + query_params={ + 'site_id': '$site', + 'rack_id': '$rack', + 'cluster_id': 'null', + } ) class Meta: @@ -362,16 +362,16 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) cluster = DynamicModelChoiceField( queryset=Cluster.objects.all(), - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'cluster_group'}, - ] + query_params={ + 'group_id': '$cluster_group' + } ) role = DynamicModelChoiceField( queryset=DeviceRole.objects.all(), required=False, - filter_fields=[ - {'accessor': 'vm_role', 'field_name': 'vm_role', 'default_value': True}, - ], + query_params={ + "vm_role": "True" + } ) platform = DynamicModelChoiceField( queryset=Platform.objects.all(), @@ -510,9 +510,9 @@ class VirtualMachineBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldM vm_role=True ), required=False, - filter_fields=[ - {'accessor': 'vm_role', 'field_name': 'vm_role', 'default_value': True}, - ] + query_params={ + "vm_role": "True" + } ) tenant = DynamicModelChoiceField( queryset=Tenant.objects.all(), @@ -595,10 +595,10 @@ class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod queryset=Site.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'region_id', 'field_name': 'region_id'}, - {'accessor': 'group_id', 'field_name': 'site_group_id'}, - ], + query_params={ + 'region_id': '$region_id', + 'group_id': '$site_group_id', + }, label=_('Site'), fetch_trigger='open' ) @@ -606,9 +606,9 @@ class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod queryset=DeviceRole.objects.all(), required=False, null_option='None', - filter_fields=[ - {'accessor': 'vm_role', 'field_name': 'vm_role', 'default_value': True}, - ], + query_params={ + 'vm_role': "True" + }, label=_('Role'), fetch_trigger='open' ) @@ -657,17 +657,17 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm) queryset=VLAN.objects.all(), required=False, label='Untagged VLAN', - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'vlan_group'}, - ] + query_params={ + 'group_id': '$vlan_group', + } ) tagged_vlans = DynamicModelMultipleChoiceField( queryset=VLAN.objects.all(), required=False, label='Tagged VLANs', - filter_fields=[ - {'accessor': 'group_id', 'field_name': 'vlan_group'}, - ] + query_params={ + 'group_id': '$vlan_group', + } ) tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -718,9 +718,9 @@ class VMInterfaceCreateForm(BootstrapMixin, CustomFieldsMixin, InterfaceCommonFo parent = DynamicModelChoiceField( queryset=VMInterface.objects.all(), required=False, - filter_fields=[ - {'accessor': 'virtual_machine_id', 'field_name': 'virtual_machine'}, - ] + query_params={ + 'virtual_machine_id': '$virtual_machine', + } ) mac_address = forms.CharField( required=False, @@ -896,9 +896,9 @@ class VMInterfaceFilterForm(BootstrapMixin, forms.Form): virtual_machine_id = DynamicModelMultipleChoiceField( queryset=VirtualMachine.objects.all(), required=False, - filter_fields=[ - {'accessor': 'cluster_id', 'field_name': 'cluster_id'}, - ], + query_params={ + 'cluster_id': '$cluster_id' + }, label=_('Virtual machine'), fetch_trigger='open' )