fix performance regression for Site save, use bulk_update for cached fields

This commit is contained in:
Arthur
2026-01-14 16:30:40 -08:00
parent 434334d927
commit 8cbfe94fba

View File

@@ -211,12 +211,16 @@ def sync_cached_scope_fields(instance, created, **kwargs):
for model in (Prefix, Cluster, WirelessLAN): for model in (Prefix, Cluster, WirelessLAN):
qs = model.objects.filter(**filters) 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: for obj in qs:
# Recompute cache using the same logic as save() # Recompute cache using the same logic as save()
obj.cache_related_objects() obj.cache_related_objects()
obj.save(update_fields=[ objects_to_update.append(obj)
'_location',
'_site', if objects_to_update:
'_site_group', model.objects.bulk_update(
'_region', objects_to_update,
]) ['_location', '_site', '_site_group', '_region']
)