diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 89292717b..9e91fc113 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -186,7 +186,7 @@ def rack_group_choices(): class RackFilterForm(forms.Form, BootstrapMixin): site = forms.MultipleChoiceField(required=False, choices=rack_site_choices, widget=forms.SelectMultiple(attrs={'size': 8})) - group_id = forms.MultipleChoiceField(required=False, choices=rack_group_choices, + group_id = forms.MultipleChoiceField(required=False, choices=rack_group_choices, label='Rack Group', widget=forms.SelectMultiple(attrs={'size': 8})) @@ -502,6 +502,11 @@ def device_site_choices(): return [(s.slug, '{} ({})'.format(s.name, s.device_count)) for s in site_choices] +def rack_group_choices(): + group_choices = RackGroup.objects.select_related('site').annotate(rack_count=Count('racks')) + return [(g.pk, '{} ({})'.format(g, g.rack_count)) for g in group_choices] + + def device_role_choices(): role_choices = DeviceRole.objects.annotate(device_count=Count('devices')) return [(r.slug, '{} ({})'.format(r.name, r.device_count)) for r in role_choices] @@ -520,6 +525,8 @@ def device_platform_choices(): class DeviceFilterForm(forms.Form, BootstrapMixin): site = forms.MultipleChoiceField(required=False, choices=device_site_choices, widget=forms.SelectMultiple(attrs={'size': 8})) + group_id = forms.MultipleChoiceField(required=False, choices=rack_group_choices, label='Rack Group', + widget=forms.SelectMultiple(attrs={'size': 8})) role = forms.MultipleChoiceField(required=False, choices=device_role_choices, widget=forms.SelectMultiple(attrs={'size': 8})) device_type_id = forms.MultipleChoiceField(required=False, choices=device_type_choices, label='Type',