Skip to content

Commit c2d0cfd

Browse files
committed
Fixes #7864: power_port can be null when creating power outlets
1 parent 5dd2527 commit c2d0cfd

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

docs/release-notes/version-3.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
* [#7851](https://github.com/netbox-community/netbox/issues/7851) - Add missing cluster name filter for virtual machines
2121
* [#7857](https://github.com/netbox-community/netbox/issues/7857) - Fix ordering IP addresses by assignment status
2222
* [#7859](https://github.com/netbox-community/netbox/issues/7859) - Fix styling of form widgets under cable connection views
23+
* [#7864](https://github.com/netbox-community/netbox/issues/7864) - `power_port` can be null when creating power outlets
2324

2425
---
2526

netbox/dcim/api/serializers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
356356
required=False
357357
)
358358
power_port = NestedPowerPortTemplateSerializer(
359-
required=False
359+
required=False,
360+
allow_null=True
360361
)
361362
feed_leg = ChoiceField(
362363
choices=PowerOutletFeedLegChoices,
@@ -585,7 +586,8 @@ class PowerOutletSerializer(PrimaryModelSerializer, CableTerminationSerializer,
585586
required=False
586587
)
587588
power_port = NestedPowerPortSerializer(
588-
required=False
589+
required=False,
590+
allow_null=True
589591
)
590592
feed_leg = ChoiceField(
591593
choices=PowerOutletFeedLegChoices,

netbox/dcim/tests/test_api.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,12 @@ def setUpTestData(cls):
584584
manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'
585585
)
586586

587+
power_port_templates = (
588+
PowerPortTemplate(device_type=devicetype, name='Power Port Template 1'),
589+
PowerPortTemplate(device_type=devicetype, name='Power Port Template 2'),
590+
)
591+
PowerPortTemplate.objects.bulk_create(power_port_templates)
592+
587593
power_outlet_templates = (
588594
PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 1'),
589595
PowerOutletTemplate(device_type=devicetype, name='Power Outlet Template 2'),
@@ -595,14 +601,17 @@ def setUpTestData(cls):
595601
{
596602
'device_type': devicetype.pk,
597603
'name': 'Power Outlet Template 4',
604+
'power_port': power_port_templates[0].pk,
598605
},
599606
{
600607
'device_type': devicetype.pk,
601608
'name': 'Power Outlet Template 5',
609+
'power_port': power_port_templates[1].pk,
602610
},
603611
{
604612
'device_type': devicetype.pk,
605613
'name': 'Power Outlet Template 6',
614+
'power_port': None,
606615
},
607616
]
608617

@@ -1139,6 +1148,12 @@ def setUpTestData(cls):
11391148
devicerole = DeviceRole.objects.create(name='Test Device Role 1', slug='test-device-role-1', color='ff0000')
11401149
device = Device.objects.create(device_type=devicetype, device_role=devicerole, name='Device 1', site=site)
11411150

1151+
power_ports = (
1152+
PowerPort(device=device, name='Power Port 1'),
1153+
PowerPort(device=device, name='Power Port 2'),
1154+
)
1155+
PowerPort.objects.bulk_create(power_ports)
1156+
11421157
power_outlets = (
11431158
PowerOutlet(device=device, name='Power Outlet 1'),
11441159
PowerOutlet(device=device, name='Power Outlet 2'),
@@ -1150,14 +1165,17 @@ def setUpTestData(cls):
11501165
{
11511166
'device': device.pk,
11521167
'name': 'Power Outlet 4',
1168+
'power_port': power_ports[0].pk,
11531169
},
11541170
{
11551171
'device': device.pk,
11561172
'name': 'Power Outlet 5',
1173+
'power_port': power_ports[1].pk,
11571174
},
11581175
{
11591176
'device': device.pk,
11601177
'name': 'Power Outlet 6',
1178+
'power_port': None,
11611179
},
11621180
]
11631181

0 commit comments

Comments
 (0)