From 0c7fb56f2e3a6a0a30cf00a1223e9e9d8d8d2a9b Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Thu, 25 Jul 2024 19:49:22 +0700 Subject: [PATCH] 10500 check recursion --- netbox/dcim/models/device_components.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index a34b7706e..ed6e70976 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -1107,6 +1107,23 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin): def get_absolute_url(self): return reverse('dcim:modulebay', kwargs={'pk': self.pk}) + def clean(self): + super().clean() + + # Check for recursion of moduleX -> module bay -> modulex + if module := self.module: + all_module_bays = self.device.modulebays.all().select_related('module') + found = [] + while module: + if module.id in found: + raise ValidationError(_("Cannot have a recursion in Module Bay -> Module relationships.")) + + found.append(module.id) + if module.module_bay: + module = module.module_bay.module + else: + module = None + class DeviceBay(ComponentModel, TrackingModelMixin): """