diff --git a/docs/release-notes/version-3.2.md b/docs/release-notes/version-3.2.md index ea5a2374a..5f60e8d91 100644 --- a/docs/release-notes/version-3.2.md +++ b/docs/release-notes/version-3.2.md @@ -9,6 +9,7 @@ ### Bug Fixes * [#8931](https://github.com/netbox-community/netbox/issues/8931) - Copy assigned tenant when cloning a location +* [#9055](https://github.com/netbox-community/netbox/issues/9055) - Restore ability to move inventory item to other device * [#9057](https://github.com/netbox-community/netbox/issues/9057) - Fix missing instance counts for module types * [#9061](https://github.com/netbox-community/netbox/issues/9061) - Change inheritance order for DeviceComponentFilterSets * [#9065](https://github.com/netbox-community/netbox/issues/9065) - Min/max VID should not be required when filtering VLAN groups diff --git a/netbox/dcim/forms/bulk_edit.py b/netbox/dcim/forms/bulk_edit.py index b166530c8..9e4f5e400 100644 --- a/netbox/dcim/forms/bulk_edit.py +++ b/netbox/dcim/forms/bulk_edit.py @@ -1204,6 +1204,10 @@ class InventoryItemBulkEditForm( form_from_model(InventoryItem, ['label', 'role', 'manufacturer', 'part_id', 'description']), NetBoxModelBulkEditForm ): + device = DynamicModelChoiceField( + queryset=Device.objects.all(), + required=False + ) role = DynamicModelChoiceField( queryset=InventoryItemRole.objects.all(), required=False @@ -1215,7 +1219,7 @@ class InventoryItemBulkEditForm( model = InventoryItem fieldsets = ( - (None, ('label', 'role', 'manufacturer', 'part_id', 'description')), + (None, ('device', 'label', 'role', 'manufacturer', 'part_id', 'description')), ) nullable_fields = ('label', 'role', 'manufacturer', 'part_id', 'description') diff --git a/netbox/dcim/forms/models.py b/netbox/dcim/forms/models.py index 57e2fa820..fe9daf938 100644 --- a/netbox/dcim/forms/models.py +++ b/netbox/dcim/forms/models.py @@ -1362,6 +1362,9 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form): class InventoryItemForm(NetBoxModelForm): + device = DynamicModelChoiceField( + queryset=Device.objects.all() + ) parent = DynamicModelChoiceField( queryset=InventoryItem.objects.all(), required=False, @@ -1399,9 +1402,6 @@ class InventoryItemForm(NetBoxModelForm): 'device', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'component_type', 'component_id', 'tags', ] - widgets = { - 'device': forms.HiddenInput(), - } # diff --git a/netbox/dcim/forms/object_create.py b/netbox/dcim/forms/object_create.py index 8618a3b9d..e3e9c1179 100644 --- a/netbox/dcim/forms/object_create.py +++ b/netbox/dcim/forms/object_create.py @@ -1,7 +1,6 @@ from django import forms from dcim.models import * -from extras.models import Tag from netbox.forms import NetBoxModelForm from utilities.forms import ( BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField, @@ -12,6 +11,7 @@ __all__ = ( 'DeviceComponentCreateForm', 'FrontPortCreateForm', 'FrontPortTemplateCreateForm', + 'InventoryItemCreateForm', 'ModularComponentTemplateCreateForm', 'ModuleBayCreateForm', 'ModuleBayTemplateCreateForm', @@ -199,6 +199,11 @@ class ModuleBayCreateForm(DeviceComponentCreateForm): field_order = ('device', 'name_pattern', 'label_pattern', 'position_pattern') +class InventoryItemCreateForm(ComponentCreateForm): + # Device is assigned by the model form + field_order = ('name_pattern', 'label_pattern') + + class VirtualChassisCreateForm(NetBoxModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index c0b46f16e..0e68328ad 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2517,7 +2517,7 @@ class InventoryItemEditView(generic.ObjectEditView): class InventoryItemCreateView(generic.ComponentCreateView): queryset = InventoryItem.objects.all() - form = forms.DeviceComponentCreateForm + form = forms.InventoryItemCreateForm model_form = forms.InventoryItemForm template_name = 'dcim/inventoryitem_create.html'