diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index 33ca44a22..4a9d9f1bf 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -206,6 +206,17 @@ class VMInterfaceFilterSet(BaseFilterSet): method='search', label='Search', ) + cluster_id = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_machine__cluster', + queryset=Cluster.objects.unrestricted(), + label='Cluster (ID)', + ) + cluster = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_machine__cluster__name', + queryset=Cluster.objects.unrestricted(), + to_field_name='name', + label='Cluster', + ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine', queryset=VirtualMachine.objects.unrestricted(), diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 26894fdd0..d32b08ffa 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -821,6 +821,21 @@ class VMInterfaceBulkRenameForm(BulkRenameForm): class VMInterfaceFilterForm(forms.Form): model = VMInterface + cluster_id = DynamicModelMultipleChoiceField( + queryset=Cluster.objects.all(), + required=False, + label='Cluster', + widget=APISelectMultiple( + filter_for={ + 'virtual_machine_id': 'cluster_id' + } + ) + ) + virtual_machine_id = DynamicModelMultipleChoiceField( + queryset=VirtualMachine.objects.all(), + required=False, + label='Virtual machine' + ) enabled = forms.NullBooleanField( required=False, widget=StaticSelect2(