Calculate effective values before doing validation

This commit is contained in:
Brian Tiemann 2025-01-14 14:57:37 -05:00
parent 7a9a684ece
commit 37a3d3388c

View File

@ -374,10 +374,12 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase):
if not self._state.adding: if not self._state.adding:
mounted_devices = Device.objects.filter(rack=self).exclude(position__isnull=True).order_by('position') 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 # Validate that Rack is tall enough to house the highest mounted Device
if top_device := mounted_devices.last(): if top_device := mounted_devices.last():
min_height = top_device.position + top_device.device_type.u_height - self.starting_unit min_height = top_device.position + top_device.device_type.u_height - effective_starting_unit
effective_u_height = self.rack_type.u_height if self.rack_type else self.u_height
if effective_u_height < min_height: if effective_u_height < min_height:
field = 'rack_type' if self.rack_type else 'u_height' field = 'rack_type' if self.rack_type else 'u_height'
raise ValidationError({ 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 # 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(): 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: if effective_starting_unit > last_device.position:
field = 'rack_type' if self.rack_type else 'starting_unit' field = 'rack_type' if self.rack_type else 'starting_unit'
raise ValidationError({ raise ValidationError({