Преглед на файлове

Fixes #7864: power_port can be null when creating power outlets

jeremystretch преди 4 години
родител
ревизия
c2d0cfdfc0
променени са 3 файла, в които са добавени 23 реда и са изтрити 2 реда
  1. 1 0
      docs/release-notes/version-3.0.md
  2. 4 2
      netbox/dcim/api/serializers.py
  3. 18 0
      netbox/dcim/tests/test_api.py

+ 1 - 0
docs/release-notes/version-3.0.md

@@ -20,6 +20,7 @@
 * [#7851](https://github.com/netbox-community/netbox/issues/7851) - Add missing cluster name filter for virtual machines
 * [#7851](https://github.com/netbox-community/netbox/issues/7851) - Add missing cluster name filter for virtual machines
 * [#7857](https://github.com/netbox-community/netbox/issues/7857) - Fix ordering IP addresses by assignment status
 * [#7857](https://github.com/netbox-community/netbox/issues/7857) - Fix ordering IP addresses by assignment status
 * [#7859](https://github.com/netbox-community/netbox/issues/7859) - Fix styling of form widgets under cable connection views
 * [#7859](https://github.com/netbox-community/netbox/issues/7859) - Fix styling of form widgets under cable connection views
+* [#7864](https://github.com/netbox-community/netbox/issues/7864) - `power_port` can be null when creating power outlets
 
 
 ---
 ---
 
 

+ 4 - 2
netbox/dcim/api/serializers.py

@@ -356,7 +356,8 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
         required=False
         required=False
     )
     )
     power_port = NestedPowerPortTemplateSerializer(
     power_port = NestedPowerPortTemplateSerializer(
-        required=False
+        required=False,
+        allow_null=True
     )
     )
     feed_leg = ChoiceField(
     feed_leg = ChoiceField(
         choices=PowerOutletFeedLegChoices,
         choices=PowerOutletFeedLegChoices,
@@ -585,7 +586,8 @@ class PowerOutletSerializer(PrimaryModelSerializer, CableTerminationSerializer,
         required=False
         required=False
     )
     )
     power_port = NestedPowerPortSerializer(
     power_port = NestedPowerPortSerializer(
-        required=False
+        required=False,
+        allow_null=True
     )
     )
     feed_leg = ChoiceField(
     feed_leg = ChoiceField(
         choices=PowerOutletFeedLegChoices,
         choices=PowerOutletFeedLegChoices,

+ 18 - 0
netbox/dcim/tests/test_api.py

@@ -584,6 +584,12 @@ class PowerOutletTemplateTest(APIViewTestCases.APIViewTestCase):
             manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'
             manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'
         )
         )
 
 
+        power_port_templates = (
+            PowerPortTemplate(device_type=devicetype, name='Power Port Template 1'),
+            PowerPortTemplate(device_type=devicetype, name='Power Port Template 2'),
+        )
+        PowerPortTemplate.objects.bulk_create(power_port_templates)
+
         power_outlet_templates = (
         power_outlet_templates = (
             PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 1'),
             PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 1'),
             PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 2'),
             PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 2'),
@@ -595,14 +601,17 @@ class PowerOutletTemplateTest(APIViewTestCases.APIViewTestCase):
             {
             {
                 'device_type': devicetype.pk,
                 'device_type': devicetype.pk,
                 'name': 'Power Outlet Template 4',
                 'name': 'Power Outlet Template 4',
+                'power_port': power_port_templates[0].pk,
             },
             },
             {
             {
                 'device_type': devicetype.pk,
                 'device_type': devicetype.pk,
                 'name': 'Power Outlet Template 5',
                 'name': 'Power Outlet Template 5',
+                'power_port': power_port_templates[1].pk,
             },
             },
             {
             {
                 'device_type': devicetype.pk,
                 'device_type': devicetype.pk,
                 'name': 'Power Outlet Template 6',
                 'name': 'Power Outlet Template 6',
+                'power_port': None,
             },
             },
         ]
         ]
 
 
@@ -1139,6 +1148,12 @@ class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa
         devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000')
         devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000')
         device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site)
         device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site)
 
 
+        power_ports = (
+            PowerPort(device=device, name='Power Port 1'),
+            PowerPort(device=device, name='Power Port 2'),
+        )
+        PowerPort.objects.bulk_create(power_ports)
+
         power_outlets = (
         power_outlets = (
             PowerOutlet(device=device, name='Power Outlet 1'),
             PowerOutlet(device=device, name='Power Outlet 1'),
             PowerOutlet(device=device, name='Power Outlet 2'),
             PowerOutlet(device=device, name='Power Outlet 2'),
@@ -1150,14 +1165,17 @@ class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa
             {
             {
                 'device': device.pk,
                 'device': device.pk,
                 'name': 'Power Outlet 4',
                 'name': 'Power Outlet 4',
+                'power_port': power_ports[0].pk,
             },
             },
             {
             {
                 'device': device.pk,
                 'device': device.pk,
                 'name': 'Power Outlet 5',
                 'name': 'Power Outlet 5',
+                'power_port': power_ports[1].pk,
             },
             },
             {
             {
                 'device': device.pk,
                 'device': device.pk,
                 'name': 'Power Outlet 6',
                 'name': 'Power Outlet 6',
+                'power_port': None,
             },
             },
         ]
         ]