Fixes #22773: Fix TypeError when bulk adding Module Bays to Devices (#22782)

This commit is contained in:
Martin Hauser 2026-07-27 16:27:08 +02:00 committed by GitHub
parent ba5018a3b4
commit 34d6c170d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 64 additions and 1 deletions

View File

@ -115,7 +115,7 @@ class ModuleBayBulkCreateForm(
):
model = ModuleBay
field_order = ('name', 'label', 'position', 'enabled', 'description', 'tags')
replication_fields = ('name', 'label', 'position', 'enabled')
replication_fields = ('name', 'label', 'position')
position = ExpandableNameField(
label=_('Position'),
required=False,

View File

@ -3677,6 +3677,69 @@ class ModuleBayTestCase(ViewTestCases.DeviceComponentViewTestCase):
f"{module_bays[2].pk},Module Bay 9,New description9",
)
@tag('regression') # Issue #22773
def test_bulk_add_module_bays_to_devices(self):
"""
Bulk-adding module bays expands the name pattern per device and applies enabled to every new bay.
"""
self.add_permissions('dcim.add_modulebay')
device1 = Device.objects.get(name='Device 1')
device2 = create_test_device('Device 2')
initial_count = self._get_queryset().count()
# An unchecked box is not submitted by the browser at all
request = {
'path': reverse('dcim:device_bulk_add_modulebay'),
'data': post_data({
'pk': [device1.pk, device2.pk],
'name': 'PCI-Slot[1-2]',
'_create': True,
}),
}
response = self.client.post(**request)
self.assertHttpStatus(response, 302)
self.assertEqual(
list(
ModuleBay.objects.filter(name__startswith='PCI-Slot')
.order_by('device_id', 'name')
.values_list('device_id', 'name', 'enabled')
),
[
(device1.pk, 'PCI-Slot1', False),
(device1.pk, 'PCI-Slot2', False),
(device2.pk, 'PCI-Slot1', False),
(device2.pk, 'PCI-Slot2', False),
]
)
# A checked box applies True to every bay created
request = {
'path': reverse('dcim:device_bulk_add_modulebay'),
'data': post_data({
'pk': [device1.pk, device2.pk],
'name': 'PSU-Slot[1-2]',
'enabled': True,
'_create': True,
}),
}
response = self.client.post(**request)
self.assertHttpStatus(response, 302)
self.assertEqual(
list(
ModuleBay.objects.filter(name__startswith='PSU-Slot')
.order_by('device_id', 'name')
.values_list('device_id', 'name', 'enabled')
),
[
(device1.pk, 'PSU-Slot1', True),
(device1.pk, 'PSU-Slot2', True),
(device2.pk, 'PSU-Slot1', True),
(device2.pk, 'PSU-Slot2', True),
]
)
self.assertEqual(initial_count + 8, self._get_queryset().count())
class DeviceBayTestCase(ViewTestCases.DeviceComponentViewTestCase):
model = DeviceBay