From 37a3d3388cfd9e0cb7ed5524c2d2999236abb8e2 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 14 Jan 2025 14:57:37 -0500 Subject: [PATCH] Calculate effective values before doing validation --- netbox/dcim/models/racks.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index c7fce8e49..7ecbd5d5f 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -374,10 +374,12 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): if not self._state.adding: mounted_devices = Device.objects.filter(rack=self).exclude(position__isnull=True).order_by('position') + effective_u_height = self.rack_type.u_height if self.rack_type else self.u_height + effective_starting_unit = self.rack_type.starting_unit if self.rack_type else self.starting_unit + # Validate that Rack is tall enough to house the highest mounted Device if top_device := mounted_devices.last(): - min_height = top_device.position + top_device.device_type.u_height - self.starting_unit - effective_u_height = self.rack_type.u_height if self.rack_type else self.u_height + min_height = top_device.position + top_device.device_type.u_height - effective_starting_unit if effective_u_height < min_height: field = 'rack_type' if self.rack_type else 'u_height' raise ValidationError({ @@ -388,7 +390,6 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): # Validate that the Rack's starting unit is less than or equal to the position of the lowest mounted Device if last_device := mounted_devices.first(): - effective_starting_unit = self.rack_type.starting_unit if self.rack_type else self.starting_unit if effective_starting_unit > last_device.position: field = 'rack_type' if self.rack_type else 'starting_unit' raise ValidationError({