Add device_status as filtering option (and configurable column) for InventoryItemTable

This commit is contained in:
Brian Tiemann 2024-08-23 17:24:54 -04:00
parent dab27695b9
commit 5a75e305b1
4 changed files with 18 additions and 2 deletions

View File

@ -1795,6 +1795,10 @@ class InventoryItemFilterSet(DeviceComponentFilterSet, NetBoxModelFilterSet):
to_field_name='slug',
label=_('Role (slug)'),
)
device_status = django_filters.MultipleChoiceFilter(
choices=DeviceStatusChoices,
field_name='device__status',
)
component_type = ContentTypeFilter()
component_id = MultiValueNumberFilter()
serial = MultiValueCharFilter(
@ -1803,7 +1807,7 @@ class InventoryItemFilterSet(DeviceComponentFilterSet, NetBoxModelFilterSet):
class Meta:
model = InventoryItem
fields = ('id', 'name', 'label', 'part_id', 'asset_tag', 'description', 'discovered')
fields = ('id', 'name', 'label', 'part_id', 'asset_tag', 'description', 'discovered', 'device_status')
def search(self, queryset, name, value):
if not value.strip():

View File

@ -1434,7 +1434,7 @@ class InventoryItemFilterForm(DeviceComponentFilterForm):
name=_('Attributes')
),
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')),
FieldSet('device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', name=_('Device')),
)
role_id = DynamicModelMultipleChoiceField(
queryset=InventoryItemRole.objects.all(),
@ -1461,6 +1461,11 @@ class InventoryItemFilterForm(DeviceComponentFilterForm):
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
device_status = forms.MultipleChoiceField(
choices=DeviceStatusChoices,
required=False,
label=_('Device Status'),
)
tag = TagFilterField(model)

View File

@ -1265,6 +1265,9 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin):
def get_absolute_url(self):
return reverse('dcim:inventoryitem', kwargs={'pk': self.pk})
def get_device_status_color(self):
return self.device.get_status_color()
def clean(self):
super().clean()

View File

@ -927,6 +927,10 @@ class InventoryItemTable(DeviceComponentTable):
tags = columns.TagColumn(
url_name='dcim:inventoryitem_list'
)
device_status = columns.ChoiceFieldColumn(
accessor=tables.A('device__status'),
verbose_name=_('Device Status'),
)
cable = None # Override DeviceComponentTable
class Meta(NetBoxTable.Meta):