diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index c7dbfcb17..3b4990c33 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -23,6 +23,7 @@ __all__ = ( 'DeviceBayCSVForm', 'DeviceCSVForm', 'DeviceRoleCSVForm', + 'DeviceTypeImportForm', 'FrontPortCSVForm', 'InterfaceCSVForm', 'InventoryItemCSVForm', @@ -31,6 +32,7 @@ __all__ = ( 'ManufacturerCSVForm', 'ModuleCSVForm', 'ModuleBayCSVForm', + 'ModuleTypeImportForm', 'PlatformCSVForm', 'PowerFeedCSVForm', 'PowerOutletCSVForm', @@ -269,6 +271,31 @@ class ManufacturerCSVForm(NetBoxModelCSVForm): fields = ('name', 'slug', 'description', 'tags') +class DeviceTypeImportForm(NetBoxModelCSVForm): + manufacturer = forms.ModelChoiceField( + queryset=Manufacturer.objects.all(), + to_field_name='name' + ) + + class Meta: + model = DeviceType + fields = [ + 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role', 'airflow', + 'description', 'comments', + ] + + +class ModuleTypeImportForm(NetBoxModelCSVForm): + manufacturer = forms.ModelChoiceField( + queryset=Manufacturer.objects.all(), + to_field_name='name' + ) + + class Meta: + model = ModuleType + fields = ['manufacturer', 'model', 'part_number', 'description', 'comments'] + + class DeviceRoleCSVForm(NetBoxModelCSVForm): slug = SlugField() diff --git a/netbox/dcim/forms/object_import.py b/netbox/dcim/forms/object_import.py index 920c0081f..dfa1a4c6a 100644 --- a/netbox/dcim/forms/object_import.py +++ b/netbox/dcim/forms/object_import.py @@ -9,43 +9,16 @@ __all__ = ( 'ConsolePortTemplateImportForm', 'ConsoleServerPortTemplateImportForm', 'DeviceBayTemplateImportForm', - 'DeviceTypeImportForm', 'FrontPortTemplateImportForm', 'InterfaceTemplateImportForm', 'InventoryItemTemplateImportForm', 'ModuleBayTemplateImportForm', - 'ModuleTypeImportForm', 'PowerOutletTemplateImportForm', 'PowerPortTemplateImportForm', 'RearPortTemplateImportForm', ) -class DeviceTypeImportForm(BootstrapMixin, forms.ModelForm): - manufacturer = forms.ModelChoiceField( - queryset=Manufacturer.objects.all(), - to_field_name='name' - ) - - class Meta: - model = DeviceType - fields = [ - 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role', 'airflow', - 'description', 'comments', - ] - - -class ModuleTypeImportForm(BootstrapMixin, forms.ModelForm): - manufacturer = forms.ModelChoiceField( - queryset=Manufacturer.objects.all(), - to_field_name='name' - ) - - class Meta: - model = ModuleType - fields = ['manufacturer', 'model', 'part_number', 'description', 'comments'] - - # # Component template import forms # diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index b64871290..6bed8f44f 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -63,6 +63,10 @@ class NetBoxModelCSVForm(CSVModelForm, NetBoxModelForm): """ Base form for creating a NetBox objects from CSV data. Used for bulk importing. """ + id = forms.IntegerField( + required=False, + help_text='Numeric ID of an existing object to update (if not creating a new object)' + ) tags = CSVModelMultipleChoiceField( queryset=Tag.objects.all(), required=False, diff --git a/netbox/templates/generic/object_import.html b/netbox/templates/generic/object_import.html deleted file mode 100644 index 4d54fde61..000000000 --- a/netbox/templates/generic/object_import.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends 'base/layout.html' %} -{% load helpers %} -{% load form_helpers %} - -{% block title %}{{ obj_type|bettertitle }} Import{% endblock %} - -{% block content %} -