mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
#7846: Show assigned component (if any) when creating inventory item
This commit is contained in:
@ -1377,10 +1377,11 @@ class InventoryItemForm(CustomFieldModelForm):
|
|||||||
queryset=ContentType.objects.all(),
|
queryset=ContentType.objects.all(),
|
||||||
limit_choices_to=MODULAR_COMPONENT_MODELS,
|
limit_choices_to=MODULAR_COMPONENT_MODELS,
|
||||||
required=False,
|
required=False,
|
||||||
widget=StaticSelect
|
widget=forms.HiddenInput
|
||||||
)
|
)
|
||||||
component_id = forms.IntegerField(
|
component_id = forms.IntegerField(
|
||||||
required=False
|
required=False,
|
||||||
|
widget=forms.HiddenInput
|
||||||
)
|
)
|
||||||
tags = DynamicModelMultipleChoiceField(
|
tags = DynamicModelMultipleChoiceField(
|
||||||
queryset=Tag.objects.all(),
|
queryset=Tag.objects.all(),
|
||||||
@ -1396,7 +1397,6 @@ class InventoryItemForm(CustomFieldModelForm):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
('Inventory Item', ('device', 'parent', 'name', 'label', 'role', 'description', 'tags')),
|
('Inventory Item', ('device', 'parent', 'name', 'label', 'role', 'description', 'tags')),
|
||||||
('Hardware', ('manufacturer', 'part_id', 'serial', 'asset_tag')),
|
('Hardware', ('manufacturer', 'part_id', 'serial', 'asset_tag')),
|
||||||
('Component', ('component_type', 'component_id')),
|
|
||||||
)
|
)
|
||||||
widgets = {
|
widgets = {
|
||||||
'device': forms.HiddenInput(),
|
'device': forms.HiddenInput(),
|
||||||
|
@ -781,6 +781,8 @@ class InventoryItemTable(DeviceComponentTable):
|
|||||||
linkify=True
|
linkify=True
|
||||||
)
|
)
|
||||||
component = tables.Column(
|
component = tables.Column(
|
||||||
|
accessor=Accessor('component'),
|
||||||
|
orderable=False,
|
||||||
linkify=True
|
linkify=True
|
||||||
)
|
)
|
||||||
discovered = BooleanColumn()
|
discovered = BooleanColumn()
|
||||||
@ -792,8 +794,8 @@ class InventoryItemTable(DeviceComponentTable):
|
|||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = InventoryItem
|
model = InventoryItem
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'device', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag',
|
'pk', 'id', 'name', 'device', 'component', 'label', 'role', 'manufacturer', 'part_id', 'serial',
|
||||||
'component', 'description', 'discovered', 'tags',
|
'asset_tag', 'description', 'discovered', 'tags',
|
||||||
)
|
)
|
||||||
default_columns = (
|
default_columns = (
|
||||||
'pk', 'name', 'device', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag',
|
'pk', 'name', 'device', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag',
|
||||||
|
@ -2399,6 +2399,18 @@ class InventoryItemEditView(generic.ObjectEditView):
|
|||||||
class InventoryItemCreateView(generic.ComponentCreateView):
|
class InventoryItemCreateView(generic.ComponentCreateView):
|
||||||
queryset = InventoryItem.objects.all()
|
queryset = InventoryItem.objects.all()
|
||||||
model_form = forms.InventoryItemForm
|
model_form = forms.InventoryItemForm
|
||||||
|
template_name = 'dcim/inventoryitem_create.html'
|
||||||
|
|
||||||
|
def alter_object(self, instance, request):
|
||||||
|
# Set component (if any)
|
||||||
|
component_type = request.GET.get('component_type')
|
||||||
|
component_id = request.GET.get('component_id')
|
||||||
|
|
||||||
|
if component_type and component_id:
|
||||||
|
content_type = get_object_or_404(ContentType, pk=component_type)
|
||||||
|
instance.component = get_object_or_404(content_type.model_class(), pk=component_id)
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemDeleteView(generic.ObjectDeleteView):
|
class InventoryItemDeleteView(generic.ObjectDeleteView):
|
||||||
|
@ -689,6 +689,9 @@ class ComponentCreateView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View
|
|||||||
def get_required_permission(self):
|
def get_required_permission(self):
|
||||||
return get_permission_for_model(self.queryset.model, 'add')
|
return get_permission_for_model(self.queryset.model, 'add')
|
||||||
|
|
||||||
|
def alter_object(self, instance, request):
|
||||||
|
return instance
|
||||||
|
|
||||||
def initialize_forms(self, request):
|
def initialize_forms(self, request):
|
||||||
data = request.POST if request.method == 'POST' else None
|
data = request.POST if request.method == 'POST' else None
|
||||||
initial_data = normalize_querydict(request.GET)
|
initial_data = normalize_querydict(request.GET)
|
||||||
@ -704,9 +707,10 @@ class ComponentCreateView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View
|
|||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
form, model_form = self.initialize_forms(request)
|
form, model_form = self.initialize_forms(request)
|
||||||
|
instance = self.alter_object(self.queryset.model, request)
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
return render(request, self.template_name, {
|
||||||
'obj': self.queryset.model,
|
'obj': instance,
|
||||||
'obj_type': self.queryset.model._meta.verbose_name,
|
'obj_type': self.queryset.model._meta.verbose_name,
|
||||||
'replication_form': form,
|
'replication_form': form,
|
||||||
'form': model_form,
|
'form': model_form,
|
||||||
@ -715,6 +719,7 @@ class ComponentCreateView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View
|
|||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
form, model_form = self.initialize_forms(request)
|
form, model_form = self.initialize_forms(request)
|
||||||
|
instance = self.alter_object(self.queryset.model, request)
|
||||||
|
|
||||||
self.validate_form(request, form)
|
self.validate_form(request, form)
|
||||||
|
|
||||||
@ -725,7 +730,7 @@ class ComponentCreateView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View
|
|||||||
return redirect(self.get_return_url(request))
|
return redirect(self.get_return_url(request))
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
return render(request, self.template_name, {
|
||||||
'obj': self.queryset.model,
|
'obj': instance,
|
||||||
'obj_type': self.queryset.model._meta.verbose_name,
|
'obj_type': self.queryset.model._meta.verbose_name,
|
||||||
'replication_form': form,
|
'replication_form': form,
|
||||||
'form': model_form,
|
'form': model_form,
|
||||||
|
18
netbox/templates/dcim/inventoryitem_create.html
Normal file
18
netbox/templates/dcim/inventoryitem_create.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{% extends 'dcim/component_create.html' %}
|
||||||
|
{% load helpers %}
|
||||||
|
|
||||||
|
{% block form %}
|
||||||
|
{% if obj.component %}
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-sm-3 col-form-label text-lg-end required">
|
||||||
|
{{ obj.component|meta:"verbose_name"|bettertitle }}
|
||||||
|
</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="form-control-plaintext">
|
||||||
|
<a href="{{ obj.component.get_absolute_url }}" class="">{{ obj.component }}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{{ block.super }}
|
||||||
|
{% endblock %}
|
Reference in New Issue
Block a user