diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 4fea49ca7..cfa4c68bb 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -654,15 +654,24 @@ class DeviceForm(BootstrapMixin, CustomFieldForm): class BaseDeviceFromCSVForm(forms.ModelForm): - device_role = forms.ModelChoiceField(queryset=DeviceRole.objects.all(), to_field_name='name', - error_messages={'invalid_choice': 'Invalid device role.'}) - tenant = forms.ModelChoiceField(Tenant.objects.all(), to_field_name='name', required=False, - error_messages={'invalid_choice': 'Tenant not found.'}) - manufacturer = forms.ModelChoiceField(queryset=Manufacturer.objects.all(), to_field_name='name', - error_messages={'invalid_choice': 'Invalid manufacturer.'}) + device_role = forms.ModelChoiceField( + queryset=DeviceRole.objects.all(), to_field_name='name', + error_messages={'invalid_choice': 'Invalid device role.'} + ) + tenant = forms.ModelChoiceField( + Tenant.objects.all(), to_field_name='name', required=False, + error_messages={'invalid_choice': 'Tenant not found.'} + ) + manufacturer = forms.ModelChoiceField( + queryset=Manufacturer.objects.all(), to_field_name='name', + error_messages={'invalid_choice': 'Invalid manufacturer.'} + ) model_name = forms.CharField() - platform = forms.ModelChoiceField(queryset=Platform.objects.all(), required=False, to_field_name='name', - error_messages={'invalid_choice': 'Invalid platform.'}) + platform = forms.ModelChoiceField( + queryset=Platform.objects.all(), required=False, to_field_name='name' + , error_messages={'invalid_choice': 'Invalid platform.'} + ) + status_name = forms.ChoiceField(choices=[(s[1], s[0]) for s in STATUS_CHOICES]) class Meta: fields = [] @@ -680,17 +689,24 @@ class BaseDeviceFromCSVForm(forms.ModelForm): except DeviceType.DoesNotExist: self.add_error('model_name', "Invalid device type ({} {})".format(manufacturer, model_name)) + def clean_status_name(self): + return dict(self.fields['status_name'].choices)[self.cleaned_data['status_name']] + class DeviceFromCSVForm(BaseDeviceFromCSVForm): - site = forms.ModelChoiceField(queryset=Site.objects.all(), to_field_name='name', error_messages={ - 'invalid_choice': 'Invalid site name.', - }) + site = forms.ModelChoiceField( + queryset=Site.objects.all(), to_field_name='name', error_messages={ + 'invalid_choice': 'Invalid site name.', + } + ) rack_name = forms.CharField(required=False) face = forms.CharField(required=False) class Meta(BaseDeviceFromCSVForm.Meta): - fields = ['name', 'device_role', 'tenant', 'manufacturer', 'model_name', 'platform', 'serial', 'asset_tag', - 'site', 'rack_name', 'position', 'face'] + fields = [ + 'name', 'device_role', 'tenant', 'manufacturer', 'model_name', 'platform', 'serial', 'asset_tag', + 'status_name', 'site', 'rack_name', 'position', 'face', + ] def clean(self): @@ -732,8 +748,8 @@ class ChildDeviceFromCSVForm(BaseDeviceFromCSVForm): class Meta(BaseDeviceFromCSVForm.Meta): fields = [ - 'name', 'device_role', 'tenant', 'manufacturer', 'model_name', 'platform', 'serial', 'asset_tag', 'parent', - 'device_bay_name', + 'name', 'device_role', 'tenant', 'manufacturer', 'model_name', 'platform', 'serial', 'asset_tag', + 'status_name', 'parent', 'device_bay_name', ] def clean(self): diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index b7c4f9837..d1ea08750 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -1089,6 +1089,7 @@ class Device(CreatedUpdatedModel, CustomFieldModel): self.platform.name if self.platform else None, self.serial, self.asset_tag, + self.get_status_display(), self.site.name, self.rack.name if self.rack else None, self.position, diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 8e485f154..d15e274c7 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -465,6 +465,7 @@ class DeviceSearchTable(SearchTable): class DeviceImportTable(BaseTable): name = tables.TemplateColumn(template_code=DEVICE_LINK, verbose_name='Name') + status = tables.TemplateColumn(template_code=DEVICE_STATUS, verbose_name='Status') tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')], verbose_name='Tenant') site = tables.LinkColumn('dcim:site', args=[Accessor('site.slug')], verbose_name='Site') rack = tables.LinkColumn('dcim:rack', args=[Accessor('rack.pk')], verbose_name='Rack') @@ -474,7 +475,7 @@ class DeviceImportTable(BaseTable): class Meta(BaseTable.Meta): model = Device - fields = ('name', 'tenant', 'site', 'rack', 'position', 'device_role', 'device_type') + fields = ('name', 'status', 'tenant', 'site', 'rack', 'position', 'device_role', 'device_type') empty_text = False diff --git a/netbox/templates/dcim/device_import.html b/netbox/templates/dcim/device_import.html index 83d0d2195..df456ee98 100644 --- a/netbox/templates/dcim/device_import.html +++ b/netbox/templates/dcim/device_import.html @@ -70,6 +70,11 @@
rack101_sw1,ToR Switch,Pied Piper,Juniper,EX4300-48T,Juniper Junos,CAB00577291,ABC123456,Ashburn-VA,R101,21,Rear+
rack101_sw1,ToR Switch,Pied Piper,Juniper,EX4300-48T,Juniper Junos,CAB00577291,ABC123456,Active,Ashburn-VA,R101,21,Rear{% endblock %}