diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index fd2c610a3..0848966e8 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1019,9 +1019,15 @@ class DeviceFilterSet( label=_('VM cluster (ID)'), ) cluster_group = django_filters.ModelMultipleChoiceFilter( + field_name='cluster__group__slug', + queryset=ClusterGroup.objects.all(), + to_field_name='slug', + label=_('Cluster group (slug)'), + ) + cluster_group_id = django_filters.ModelMultipleChoiceFilter( field_name='cluster__group', queryset=ClusterGroup.objects.all(), - label=_('Cluster group (name)'), + label=_('Cluster group (ID)'), ) model = django_filters.ModelMultipleChoiceFilter( field_name='device_type__slug', diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 78f2c5f19..22e66763b 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -656,7 +656,7 @@ class DeviceFilterForm( 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_('Components') ), - FieldSet('cluster_group', 'cluster_id', name=_('Cluster')), + FieldSet('cluster_group_id', 'cluster_id', name=_('Cluster')), FieldSet( 'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data', 'has_virtual_device_context', @@ -828,7 +828,7 @@ class DeviceFilterForm( required=False, label=_('Cluster') ) - cluster_group = DynamicModelMultipleChoiceField( + cluster_group_id = DynamicModelMultipleChoiceField( queryset=ClusterGroup.objects.all(), required=False, label=_('Cluster group') diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index ad86d8ee1..d08e2707f 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -1959,12 +1959,16 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): Rack.objects.bulk_create(racks) cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') - cluster_group_1 = ClusterGroup.objects.create(name='Cluster Group 1', slug='cluster-group-1') - cluster_group_2 = ClusterGroup.objects.create(name='Cluster Group 2', slug='cluster-group-2') + cluster_groups = ( + ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'), + ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'), + ClusterGroup(name='Cluster Group 3', slug='cluster-group-3'), + ) + ClusterGroup.objects.bulk_create(cluster_groups) clusters = ( - Cluster(name='Cluster 1', type=cluster_type, group=cluster_group_1), - Cluster(name='Cluster 2', type=cluster_type, group=cluster_group_1), - Cluster(name='Cluster 3', type=cluster_type, group=cluster_group_2), + Cluster(name='Cluster 1', type=cluster_type, group=cluster_groups[0]), + Cluster(name='Cluster 2', type=cluster_type, group=cluster_groups[1]), + Cluster(name='Cluster 3', type=cluster_type, group=cluster_groups[2]), ) Cluster.objects.bulk_create(clusters) @@ -2215,15 +2219,12 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_cluster_group_1(self): - cluster_group = ClusterGroup.objects.all() - params = {'cluster_group': [cluster_group[0].pk]} + def test_cluster_group(self): + cluster_groups = ClusterGroup.objects.all()[:2] + params = {'cluster_group_id': [cluster_groups[0].pk, cluster_groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'cluster_group': [cluster_groups[0].slug, cluster_groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - - def test_cluster_group_2(self): - cluster_group = ClusterGroup.objects.all() - params = {'cluster_group': [cluster_group[1].pk]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) def test_model(self): params = {'model': ['model-1', 'model-2']}