mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-21 02:58:43 -06:00
Compare commits
1 Commits
20911-drop
...
20911-drop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be1a008216 |
@@ -1273,7 +1273,7 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin, MPTTModel):
|
|||||||
verbose_name_plural = _('module bays')
|
verbose_name_plural = _('module bays')
|
||||||
|
|
||||||
class MPTTMeta:
|
class MPTTMeta:
|
||||||
order_insertion_by = ('name',)
|
order_insertion_by = ('module', 'name',)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|||||||
@@ -343,21 +343,42 @@ class Module(TrackingModelMixin, PrimaryModel, ConfigContextModel):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# ModuleBays must be saved individually for MPTT
|
# ModuleBays must be saved individually for MPTT
|
||||||
for instance in create_instances:
|
# Use delay_mptt_updates for better performance when creating multiple ModuleBays
|
||||||
instance.save()
|
with ModuleBay.objects.delay_mptt_updates():
|
||||||
|
for instance in create_instances:
|
||||||
|
instance.save()
|
||||||
|
|
||||||
update_fields = ['module']
|
update_fields = ['module']
|
||||||
component_model.objects.bulk_update(update_instances, update_fields)
|
|
||||||
# Emit the post_save signal for each updated object
|
if component_model is not ModuleBay:
|
||||||
for component in update_instances:
|
component_model.objects.bulk_update(update_instances, update_fields)
|
||||||
post_save.send(
|
# Emit the post_save signal for each updated object
|
||||||
sender=component_model,
|
for component in update_instances:
|
||||||
instance=component,
|
post_save.send(
|
||||||
created=False,
|
sender=component_model,
|
||||||
raw=False,
|
instance=component,
|
||||||
using='default',
|
created=False,
|
||||||
update_fields=update_fields
|
raw=False,
|
||||||
)
|
using='default',
|
||||||
|
update_fields=update_fields
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# ModuleBays must be saved individually to maintain MPTT tree structure
|
||||||
|
# Use delay_mptt_updates for better performance
|
||||||
|
with ModuleBay.objects.delay_mptt_updates():
|
||||||
|
for component in update_instances:
|
||||||
|
component.save()
|
||||||
|
post_save.send(
|
||||||
|
sender=component_model,
|
||||||
|
instance=component,
|
||||||
|
created=False,
|
||||||
|
raw=False,
|
||||||
|
using='default',
|
||||||
|
update_fields=update_fields
|
||||||
|
)
|
||||||
|
# Rebuild the tree once to apply order_insertion_by after all operations
|
||||||
|
if create_instances or update_instances:
|
||||||
|
ModuleBay.objects.rebuild()
|
||||||
|
|
||||||
# Interface bridges have to be set after interface instantiation
|
# Interface bridges have to be set after interface instantiation
|
||||||
update_interface_bridges(self.device, self.module_type.interfacetemplates, self)
|
update_interface_bridges(self.device, self.module_type.interfacetemplates, self)
|
||||||
|
|||||||
@@ -895,9 +895,18 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView):
|
|||||||
renamed_pks = self._rename_objects(form, selected_objects)
|
renamed_pks = self._rename_objects(form, selected_objects)
|
||||||
|
|
||||||
if '_apply' in request.POST:
|
if '_apply' in request.POST:
|
||||||
for obj in selected_objects:
|
# For MPTT models, delay tree updates until all saves are complete
|
||||||
setattr(obj, self.field_name, obj.new_name)
|
if issubclass(self.queryset.model, MPTTModel):
|
||||||
obj.save()
|
with self.queryset.model.objects.delay_mptt_updates():
|
||||||
|
for obj in selected_objects:
|
||||||
|
setattr(obj, self.field_name, obj.new_name)
|
||||||
|
obj.save()
|
||||||
|
# Rebuild the tree to apply order_insertion_by after renaming
|
||||||
|
self.queryset.model.objects.rebuild()
|
||||||
|
else:
|
||||||
|
for obj in selected_objects:
|
||||||
|
setattr(obj, self.field_name, obj.new_name)
|
||||||
|
obj.save()
|
||||||
|
|
||||||
# Enforce constrained permissions
|
# Enforce constrained permissions
|
||||||
if self.queryset.filter(pk__in=renamed_pks).count() != len(selected_objects):
|
if self.queryset.filter(pk__in=renamed_pks).count() != len(selected_objects):
|
||||||
|
|||||||
Reference in New Issue
Block a user