Parcourir la source

Fixes #270: Add rack group filter for devices

Jeremy Stretch il y a 8 ans
Parent
commit
bafbc052e2
2 fichiers modifiés avec 10 ajouts et 5 suppressions
  1. 5 0
      netbox/dcim/filters.py
  2. 5 5
      netbox/dcim/forms.py

+ 5 - 0
netbox/dcim/filters.py

@@ -122,6 +122,11 @@ class DeviceFilter(django_filters.FilterSet):
         to_field_name='slug',
         label='Site name (slug)',
     )
+    rack_group_id = django_filters.ModelMultipleChoiceFilter(
+        name='rack__group',
+        queryset=RackGroup.objects.all(),
+        label='Rack group (ID)',
+    )
     rack_id = django_filters.ModelMultipleChoiceFilter(
         name='rack',
         queryset=Rack.objects.all(),

+ 5 - 5
netbox/dcim/forms.py

@@ -502,9 +502,9 @@ 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_rack_group_choices():
+    group_choices = RackGroup.objects.select_related('site').annotate(device_count=Count('racks__devices'))
+    return [(g.pk, '{} ({})'.format(g, g.device_count)) for g in group_choices]
 
 
 def device_role_choices():
@@ -525,8 +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}))
+    rack_group_id = forms.MultipleChoiceField(required=False, choices=device_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',