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
This commit is contained in:
Martin Hauser 2026-08-27 22:02:41 +02:00 committed by Jeremy Stretch
parent 6437626d6d
commit 88f90dc8ca
4 changed files with 12 additions and 5 deletions

View File

@ -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',
]

View File

@ -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],
}

View File

@ -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',
]

View File

@ -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],
}