From 99926e43c305ab38a682606a4bfba176436f43f0 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Wed, 8 Nov 2023 22:55:33 +0530 Subject: [PATCH 1/2] adds inventory item children view #14112 --- netbox/dcim/models/device_components.py | 7 +++++++ netbox/dcim/views.py | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 639f8aadbee..4a93e4a80ba 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1283,3 +1283,10 @@ def clean(self): raise ValidationError({ "device": _("Cannot assign inventory item to component on another device") }) + + @property + def children(self): + return InventoryItem.objects.filter( + device=self.device, + parent=self + ) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 7c75dd26e38..6bd66410427 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2993,6 +2993,25 @@ class InventoryItemBulkDeleteView(generic.BulkDeleteView): template_name = 'dcim/inventoryitem_bulk_delete.html' +@register_model_view(InventoryItem, 'children') +class InventoryItemChildrenView(generic.ObjectChildrenView): + queryset = InventoryItem.objects.all() + child_model = InventoryItem + table = tables.InventoryItemTable + filterset = filtersets.InventoryItemFilterSet + template_name = 'generic/object_children.html' + tab = ViewTab( + label=_('Children'), + badge=lambda obj: obj.children.count(), + permission='dcim.view_inventoryitem', + hide_if_empty=True, + weight=5000 + ) + + def get_children(self, request, parent): + return parent.children.restrict(request.user, 'view') + + # # Inventory item roles # From 4dddd8666e9f40fa5d7cbe56bda175bc1927a815 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Nov 2023 08:31:44 -0500 Subject: [PATCH 2/2] Use existing child_items relation --- netbox/dcim/models/device_components.py | 7 ------- netbox/dcim/views.py | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 4a93e4a80ba..639f8aadbee 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1283,10 +1283,3 @@ def clean(self): raise ValidationError({ "device": _("Cannot assign inventory item to component on another device") }) - - @property - def children(self): - return InventoryItem.objects.filter( - device=self.device, - parent=self - ) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 6bd66410427..c67dfaade07 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -3002,14 +3002,14 @@ class InventoryItemChildrenView(generic.ObjectChildrenView): template_name = 'generic/object_children.html' tab = ViewTab( label=_('Children'), - badge=lambda obj: obj.children.count(), + badge=lambda obj: obj.child_items.count(), permission='dcim.view_inventoryitem', hide_if_empty=True, weight=5000 ) def get_children(self, request, parent): - return parent.children.restrict(request.user, 'view') + return parent.child_items.restrict(request.user, 'view') #