use bulk_update and rebuild

This commit is contained in:
Arthur
2026-01-21 16:23:24 -08:00
parent 62b9367ae3
commit 91ab818411

View File

@@ -330,17 +330,22 @@ class Module(TrackingModelMixin, PrimaryModel, ConfigContextModel):
component._location = self.device.location component._location = self.device.location
component._rack = self.device.rack component._rack = self.device.rack
component_model.objects.bulk_create(create_instances) if not issubclass(component_model, MPTTModel):
# Emit the post_save signal for each newly created object component_model.objects.bulk_create(create_instances)
for component in create_instances: # Emit the post_save signal for each newly created object
post_save.send( for component in create_instances:
sender=component_model, post_save.send(
instance=component, sender=component_model,
created=True, instance=component,
raw=False, created=True,
using='default', raw=False,
update_fields=None using='default',
) update_fields=None
)
else:
# MPTT models must be saved individually to maintain tree structure
for instance in create_instances:
instance.save()
update_fields = ['module'] update_fields = ['module']
@@ -356,8 +361,8 @@ class Module(TrackingModelMixin, PrimaryModel, ConfigContextModel):
update_fields=update_fields update_fields=update_fields
) )
# Rebuild MPTT tree if needed (bulk operations bypass model save) # Rebuild MPTT tree if needed (bulk_update bypasses model save)
if issubclass(component_model, MPTTModel) and (create_instances or update_instances): if issubclass(component_model, MPTTModel) and update_instances:
component_model.objects.rebuild() component_model.objects.rebuild()
# Interface bridges have to be set after interface instantiation # Interface bridges have to be set after interface instantiation