From 8cbfe94fbae0e7a51d7e355cadcb73b92b351c62 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 14 Jan 2026 16:30:40 -0800 Subject: [PATCH] fix performance regression for Site save, use bulk_update for cached fields --- netbox/dcim/signals.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index 6761c46aa..97200662b 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -211,12 +211,16 @@ def sync_cached_scope_fields(instance, created, **kwargs): for model in (Prefix, Cluster, WirelessLAN): qs = model.objects.filter(**filters) + # Bulk update cached fields to avoid O(N) performance issues with large datasets. + # This does not trigger post_save signals, avoiding spurious change log entries. + objects_to_update = [] for obj in qs: # Recompute cache using the same logic as save() obj.cache_related_objects() - obj.save(update_fields=[ - '_location', - '_site', - '_site_group', - '_region', - ]) + objects_to_update.append(obj) + + if objects_to_update: + model.objects.bulk_update( + objects_to_update, + ['_location', '_site', '_site_group', '_region'] + )