From f4c27fd494b5d4d7216e3d7849c2d7fd0b5b8782 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Fri, 6 Feb 2026 19:52:16 +0100 Subject: [PATCH] fix(ipam): Use bulk_update in VLANGroup VID range migration Replace per-row `save()` calls with `bulk_update` when populating VLANGroup VLAN ID ranges during migration. This avoids triggering post_save handlers (e.g. search cache/indexing) on existing VLANGroup records and updates only the relevant fields, improving both reliability and performance on larger databases. Fixes #21375 --- netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py index 62372a8e2..08776644a 100644 --- a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py +++ b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py @@ -13,10 +13,11 @@ def set_vid_ranges(apps, schema_editor): VLANGroup = apps.get_model('ipam', 'VLANGroup') db_alias = schema_editor.connection.alias - for group in VLANGroup.objects.using(db_alias).all(): + vlan_groups = VLANGroup.objects.using(db_alias).only('id', 'min_vid', 'max_vid') + for group in vlan_groups: group.vid_ranges = [NumericRange(group.min_vid, group.max_vid, bounds='[]')] group._total_vlan_ids = group.max_vid - group.min_vid + 1 - group.save() + VLANGroup.objects.using(db_alias).bulk_update(vlan_groups, ['vid_ranges', '_total_vlan_ids'], batch_size=100) class Migration(migrations.Migration):