From 88f90dc8cae12b315b1cd9bc43172775746d5574 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Thu, 27 Aug 2026 22:02:41 +0200 Subject: [PATCH] fix(forms): Fix owner field placement in PowerOutlet and Service forms Move owner field from fieldsets to Meta.fields in PowerOutletForm and add it to ServiceCreateForm Meta.fields. Ensures owner field appears in forms and can be properly saved. Adds test coverage with Owner creation. Fixes #23052 --- netbox/dcim/forms/model_forms.py | 4 ++-- netbox/dcim/tests/test_views.py | 6 +++++- netbox/ipam/forms/model_forms.py | 2 +- netbox/ipam/tests/test_views.py | 5 ++++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 7745deb60..8ab3091fa 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -1517,7 +1517,7 @@ class PowerOutletForm(ModularDeviceComponentForm): fieldsets = ( FieldSet( 'device', 'module', 'name', 'label', 'type', 'status', 'color', 'power_port', 'feed_leg', 'mark_connected', - 'description', 'owner', 'tags', + 'description', 'tags', ), ) @@ -1525,7 +1525,7 @@ class PowerOutletForm(ModularDeviceComponentForm): model = PowerOutlet fields = [ 'device', 'module', 'name', 'label', 'type', 'status', 'color', 'power_port', 'feed_leg', 'mark_connected', - 'description', 'tags', + 'description', 'owner', 'tags', ] diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index 87a0d3f66..076c10346 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -20,7 +20,7 @@ from extras.models import ConfigContext, ConfigTemplate from ipam.models import ASN, RIR, VLAN, VRF from netbox.choices import CSVDelimiterChoices, ImportFormatChoices, WeightUnitChoices from tenancy.models import Tenant -from users.models import ObjectPermission, User +from users.models import ObjectPermission, Owner, User from utilities.testing import ViewTestCases, create_tags, create_test_device, post_data from wireless.models import WirelessLAN @@ -3240,6 +3240,8 @@ class PowerOutletTestCase(ViewTestCases.DeviceComponentViewTestCase): ) PowerOutlet.objects.bulk_create(power_outlets) + owner = Owner.objects.create(name='Owner 1') + tags = create_tags('Alpha', 'Bravo', 'Charlie') cls.form_data = { @@ -3250,6 +3252,7 @@ class PowerOutletTestCase(ViewTestCases.DeviceComponentViewTestCase): 'power_port': powerports[1].pk, 'feed_leg': PowerOutletFeedLegChoices.FEED_LEG_B, 'description': 'A power outlet', + 'owner': owner.pk, 'tags': [t.pk for t in tags], } @@ -3261,6 +3264,7 @@ class PowerOutletTestCase(ViewTestCases.DeviceComponentViewTestCase): 'power_port': powerports[1].pk, 'feed_leg': PowerOutletFeedLegChoices.FEED_LEG_B, 'description': 'A power outlet', + 'owner': owner.pk, 'tags': [t.pk for t in tags], } diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index f6f4a17b9..1b223ccdc 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -910,7 +910,7 @@ class ServiceCreateForm(ServiceForm): class Meta(ServiceForm.Meta): fields = [ - 'service_template', 'name', 'protocol', 'ports', 'ipaddresses', 'description', + 'service_template', 'name', 'protocol', 'ports', 'ipaddresses', 'description', 'owner', 'comments', 'tags', 'parent_object_type', ] diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index 90b863d32..efb2a405d 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -20,7 +20,7 @@ from ipam.utils import AvailableIPSpace from ipam.views import AggregatePrefixesView, PrefixPrefixesView from netbox.choices import CSVDelimiterChoices, ImportFormatChoices from tenancy.models import Tenant -from users.models import Group, ObjectPermission +from users.models import Group, ObjectPermission, Owner from utilities.testing import ViewTestCases, create_tags @@ -2561,6 +2561,8 @@ class ServiceTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) IPAddress.objects.bulk_create(ip_addresses) + owner = Owner.objects.create(name='Owner 1') + tags = create_tags('Alpha', 'Bravo', 'Charlie') cls.form_data = { @@ -2571,6 +2573,7 @@ class ServiceTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'ports': '104,105', 'ipaddresses': [], 'description': 'A new service', + 'owner': owner.pk, 'tags': [t.pk for t in tags], }