diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index e629880ba..340764e7f 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -45,12 +45,6 @@ class RackFilter(django_filters.FilterSet): queryset=RackGroup.objects.all(), label='Group (ID)', ) - group = django_filters.ModelMultipleChoiceFilter( - name='group', - queryset=RackGroup.objects.all(), - to_field_name='slug', - label='Group (slug)', - ) class Meta: model = Rack diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 7bf717de0..18d7d636a 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -175,13 +175,13 @@ def rack_site_choices(): def rack_group_choices(): group_choices = RackGroup.objects.select_related('site').annotate(rack_count=Count('racks')) - return [(g.slug, '{} ({})'.format(g, g.rack_count)) for g in group_choices] + return [(g.pk, '{} ({})'.format(g, g.rack_count)) for g in group_choices] class RackFilterForm(forms.Form, BootstrapMixin): site = forms.MultipleChoiceField(required=False, choices=rack_site_choices, widget=forms.SelectMultiple(attrs={'size': 8})) - group = forms.MultipleChoiceField(required=False, choices=rack_group_choices, + group_id = forms.MultipleChoiceField(required=False, choices=rack_group_choices, widget=forms.SelectMultiple(attrs={'size': 8})) diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 9b7dc0b9e..e5b247425 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -143,7 +143,7 @@ class RackGroup(models.Model): return '{} - {}'.format(self.site.name, self.name) def get_absolute_url(self): - return "{}?group={}".format(reverse('dcim:rack_list'), self.slug) + return "{}?group_id={}".format(reverse('dcim:rack_list'), self.pk) class Rack(models.Model): diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index ebcd0fd55..7c4378c45 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -51,11 +51,12 @@ class SiteTable(tables.Table): class RackGroupTable(tables.Table): name = tables.LinkColumn(verbose_name='Name') site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site') + rack_count = tables.Column(verbose_name='Racks') slug = tables.Column(verbose_name='Slug') class Meta: model = RackGroup - fields = ('name', 'site', 'slug') + fields = ('name', 'site', 'rack_count', 'slug') empty_text = "No rack groups were found." attrs = { 'class': 'table table-hover', @@ -68,7 +69,7 @@ class RackGroupBulkEditTable(RackGroupTable): class Meta(RackGroupTable.Meta): model = None # django_tables2 bugfix - fields = ('pk', 'name', 'site', 'slug', 'edit') + fields = ('pk', 'name', 'site', 'rack_count', 'slug', 'edit') # @@ -234,7 +235,7 @@ class InterfaceTemplateBulkDeleteTable(InterfaceTemplateTable): class DeviceRoleTable(tables.Table): name = tables.LinkColumn(verbose_name='Name') - device_count = tables.Column(accessor=Accessor('device_count'), verbose_name='Devices') + device_count = tables.Column(verbose_name='Devices') slug = tables.Column(verbose_name='Slug') color = tables.Column(verbose_name='Color') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index b6bbc31a7..dc9c36c6c 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -134,7 +134,7 @@ class SiteBulkImportView(PermissionRequiredMixin, BulkImportView): # class RackGroupListView(ObjectListView): - queryset = RackGroup.objects.all() + queryset = RackGroup.objects.annotate(rack_count=Count('racks')) filter = RackGroupFilter filter_form = RackGroupFilterForm table = RackGroupTable