From 8f4980044a6288a6794f61115ce629425d68ca1d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 26 Jul 2016 11:28:45 -0400 Subject: [PATCH] Closes #292: Added part_number field to DeviceType --- netbox/dcim/admin.py | 4 ++-- netbox/dcim/api/serializers.py | 10 +++++----- netbox/dcim/filters.py | 2 +- netbox/dcim/forms.py | 2 +- .../migrations/0011_devicetype_part_number.py | 20 +++++++++++++++++++ netbox/dcim/models.py | 1 + netbox/dcim/tables.py | 3 ++- netbox/templates/dcim/devicetype.html | 10 ++++++++++ 8 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 netbox/dcim/migrations/0011_devicetype_part_number.py diff --git a/netbox/dcim/admin.py b/netbox/dcim/admin.py index 09e16c348..c5210987b 100644 --- a/netbox/dcim/admin.py +++ b/netbox/dcim/admin.py @@ -78,8 +78,8 @@ class DeviceTypeAdmin(admin.ModelAdmin): InterfaceTemplateAdmin, DeviceBayTemplateAdmin, ] - list_display = ['model', 'manufacturer', 'slug', 'u_height', 'console_ports', 'console_server_ports', 'power_ports', - 'power_outlets', 'interfaces', 'device_bays'] + list_display = ['model', 'manufacturer', 'slug', 'part_number', 'u_height', 'console_ports', 'console_server_ports', + 'power_ports', 'power_outlets', 'interfaces', 'device_bays'] list_filter = ['manufacturer'] def get_queryset(self, request): diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 5c7f655de..9224ce2b3 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -111,8 +111,8 @@ class DeviceTypeSerializer(serializers.ModelSerializer): class Meta: model = DeviceType - fields = ['id', 'manufacturer', 'model', 'slug', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu', - 'is_network_device'] + fields = ['id', 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', + 'is_console_server', 'is_pdu', 'is_network_device'] class DeviceTypeNestedSerializer(DeviceTypeSerializer): @@ -164,9 +164,9 @@ class DeviceTypeDetailSerializer(DeviceTypeSerializer): interface_templates = InterfaceTemplateNestedSerializer(many=True, read_only=True) class Meta(DeviceTypeSerializer.Meta): - fields = ['id', 'manufacturer', 'model', 'slug', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu', - 'is_network_device', 'console_port_templates', 'cs_port_templates', 'power_port_templates', - 'power_outlet_templates', 'interface_templates'] + fields = ['id', 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', + 'is_console_server', 'is_pdu', 'is_network_device', 'console_port_templates', 'cs_port_templates', + 'power_port_templates', 'power_outlet_templates', 'interface_templates'] # diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 8872e5747..0a4b14150 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -102,7 +102,7 @@ class DeviceTypeFilter(django_filters.FilterSet): class Meta: model = DeviceType - fields = ['manufacturer_id', 'manufacturer', 'model', 'u_height', 'is_console_server', 'is_pdu', + fields = ['manufacturer_id', 'manufacturer', 'model', 'part_number', 'u_height', 'is_console_server', 'is_pdu', 'is_network_device'] diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 05fa728ff..7befaf78a 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -203,7 +203,7 @@ class DeviceTypeForm(forms.ModelForm, BootstrapMixin): class Meta: model = DeviceType - fields = ['manufacturer', 'model', 'slug', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu', + fields = ['manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'is_console_server', 'is_pdu', 'is_network_device', 'subdevice_role'] diff --git a/netbox/dcim/migrations/0011_devicetype_part_number.py b/netbox/dcim/migrations/0011_devicetype_part_number.py new file mode 100644 index 000000000..62c97abc6 --- /dev/null +++ b/netbox/dcim/migrations/0011_devicetype_part_number.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.8 on 2016-07-26 15:05 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0010_devicebay_installed_device_set_null'), + ] + + operations = [ + migrations.AddField( + model_name='devicetype', + name='part_number', + field=models.CharField(blank=True, help_text=b'Discrete part number (optional)', max_length=50), + ), + ] diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 22ffcdf5b..fc77e318b 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -409,6 +409,7 @@ class DeviceType(models.Model): manufacturer = models.ForeignKey('Manufacturer', related_name='device_types', on_delete=models.PROTECT) model = models.CharField(max_length=50) slug = models.SlugField() + part_number = models.CharField(max_length=50, blank=True, help_text="Discrete part number (optional)") u_height = models.PositiveSmallIntegerField(verbose_name='Height (U)', default=1) is_full_depth = models.BooleanField(default=True, verbose_name="Is full depth", help_text="Device consumes both front and rear rack faces") diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 5ac203765..373a2e0c0 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -147,10 +147,11 @@ class DeviceTypeTable(BaseTable): pk = ToggleColumn() manufacturer = tables.Column(verbose_name='Manufacturer') model = tables.LinkColumn('dcim:devicetype', args=[Accessor('pk')], verbose_name='Device Type') + part_number = tables.Column(verbose_name='Part Number') class Meta(BaseTable.Meta): model = DeviceType - fields = ('pk', 'model', 'manufacturer', 'u_height') + fields = ('pk', 'model', 'manufacturer', 'part_number', 'u_height') # diff --git a/netbox/templates/dcim/devicetype.html b/netbox/templates/dcim/devicetype.html index df567a102..ce1b69a22 100644 --- a/netbox/templates/dcim/devicetype.html +++ b/netbox/templates/dcim/devicetype.html @@ -48,6 +48,16 @@ Model Name {{ devicetype.model }} + + Part Number + + {% if devicetype.part_number %} + {{ devicetype.part_number }} + {% else %} + N/A + {% endif %} + + Height (U) {{ devicetype.u_height }}