Browse Source

Closes #292: Added part_number field to DeviceType

Jeremy Stretch 8 years ago
parent
commit
8f4980044a

+ 2 - 2
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):

+ 5 - 5
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']
 
 
 #

+ 1 - 1
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']
 
 

+ 1 - 1
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']
 
 

+ 20 - 0
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),
+        ),
+    ]

+ 1 - 0
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")

+ 2 - 1
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')
 
 
 #

+ 10 - 0
netbox/templates/dcim/devicetype.html

@@ -49,6 +49,16 @@
                     <td>{{ devicetype.model }}</td>
                 </tr>
                 <tr>
+                    <td>Part Number</td>
+                    <td>
+                        {% if devicetype.part_number %}
+                            {{ devicetype.part_number }}
+                        {% else %}
+                            <span class="text-muted">N/A</span>
+                        {% endif %}
+                    </td>
+                </tr>
+                <tr>
                     <td>Height (U)</td>
                     <td>{{ devicetype.u_height }}</td>
                 </tr>