mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Changed RackGroup URL/filter from slug to PK (slugs are not unique across sites)
This commit is contained in:
@ -45,12 +45,6 @@ class RackFilter(django_filters.FilterSet):
|
|||||||
queryset=RackGroup.objects.all(),
|
queryset=RackGroup.objects.all(),
|
||||||
label='Group (ID)',
|
label='Group (ID)',
|
||||||
)
|
)
|
||||||
group = django_filters.ModelMultipleChoiceFilter(
|
|
||||||
name='group',
|
|
||||||
queryset=RackGroup.objects.all(),
|
|
||||||
to_field_name='slug',
|
|
||||||
label='Group (slug)',
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Rack
|
model = Rack
|
||||||
|
@ -175,13 +175,13 @@ def rack_site_choices():
|
|||||||
|
|
||||||
def rack_group_choices():
|
def rack_group_choices():
|
||||||
group_choices = RackGroup.objects.select_related('site').annotate(rack_count=Count('racks'))
|
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):
|
class RackFilterForm(forms.Form, BootstrapMixin):
|
||||||
site = forms.MultipleChoiceField(required=False, choices=rack_site_choices,
|
site = forms.MultipleChoiceField(required=False, choices=rack_site_choices,
|
||||||
widget=forms.SelectMultiple(attrs={'size': 8}))
|
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}))
|
widget=forms.SelectMultiple(attrs={'size': 8}))
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ class RackGroup(models.Model):
|
|||||||
return '{} - {}'.format(self.site.name, self.name)
|
return '{} - {}'.format(self.site.name, self.name)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
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):
|
class Rack(models.Model):
|
||||||
|
@ -51,11 +51,12 @@ class SiteTable(tables.Table):
|
|||||||
class RackGroupTable(tables.Table):
|
class RackGroupTable(tables.Table):
|
||||||
name = tables.LinkColumn(verbose_name='Name')
|
name = tables.LinkColumn(verbose_name='Name')
|
||||||
site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site')
|
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')
|
slug = tables.Column(verbose_name='Slug')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RackGroup
|
model = RackGroup
|
||||||
fields = ('name', 'site', 'slug')
|
fields = ('name', 'site', 'rack_count', 'slug')
|
||||||
empty_text = "No rack groups were found."
|
empty_text = "No rack groups were found."
|
||||||
attrs = {
|
attrs = {
|
||||||
'class': 'table table-hover',
|
'class': 'table table-hover',
|
||||||
@ -68,7 +69,7 @@ class RackGroupBulkEditTable(RackGroupTable):
|
|||||||
|
|
||||||
class Meta(RackGroupTable.Meta):
|
class Meta(RackGroupTable.Meta):
|
||||||
model = None # django_tables2 bugfix
|
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):
|
class DeviceRoleTable(tables.Table):
|
||||||
name = tables.LinkColumn(verbose_name='Name')
|
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')
|
slug = tables.Column(verbose_name='Slug')
|
||||||
color = tables.Column(verbose_name='Color')
|
color = tables.Column(verbose_name='Color')
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ class SiteBulkImportView(PermissionRequiredMixin, BulkImportView):
|
|||||||
#
|
#
|
||||||
|
|
||||||
class RackGroupListView(ObjectListView):
|
class RackGroupListView(ObjectListView):
|
||||||
queryset = RackGroup.objects.all()
|
queryset = RackGroup.objects.annotate(rack_count=Count('racks'))
|
||||||
filter = RackGroupFilter
|
filter = RackGroupFilter
|
||||||
filter_form = RackGroupFilterForm
|
filter_form = RackGroupFilterForm
|
||||||
table = RackGroupTable
|
table = RackGroupTable
|
||||||
|
Reference in New Issue
Block a user