Переглянути джерело

fix(dcim): Render device height as rack units via floatformat

Use `TemplatedAttr` for device height and render using Django's
`floatformat` filter so 0.0 is displayed as `0U` (and whole-U values
omit the decimal).

Fixes #21267
Martin Hauser 3 днів тому
батько
коміт
2eb0f56534

+ 2 - 2
netbox/dcim/ui/panels.py

@@ -126,7 +126,7 @@ class DeviceDeviceTypePanel(panels.ObjectAttributesPanel):
 
     manufacturer = attrs.RelatedObjectAttr('device_type.manufacturer', linkify=True)
     model = attrs.RelatedObjectAttr('device_type', linkify=True)
-    height = attrs.TextAttr('device_type.u_height', format_string='{}U')
+    height = attrs.TemplatedAttr('device_type.u_height', template_name='dcim/devicetype/attrs/height.html')
     front_image = attrs.ImageAttr('device_type.front_image')
     rear_image = attrs.ImageAttr('device_type.rear_image')
 
@@ -143,7 +143,7 @@ class DeviceTypePanel(panels.ObjectAttributesPanel):
     part_number = attrs.TextAttr('part_number')
     default_platform = attrs.RelatedObjectAttr('default_platform', linkify=True)
     description = attrs.TextAttr('description')
-    height = attrs.TextAttr('u_height', format_string='{}U', label=_('Height'))
+    height = attrs.TemplatedAttr('u_height', template_name='dcim/devicetype/attrs/height.html')
     exclude_from_utilization = attrs.BooleanAttr('exclude_from_utilization')
     full_depth = attrs.BooleanAttr('is_full_depth')
     weight = attrs.NumericAttr('weight', unit_accessor='get_weight_unit_display')

+ 1 - 1
netbox/netbox/ui/attrs.py

@@ -103,7 +103,7 @@ class TextAttr(ObjectAttribute):
     def get_value(self, obj):
         value = resolve_attr_path(obj, self.accessor)
         # Apply format string (if any)
-        if value and self.format_string:
+        if value is not None and value != '' and self.format_string:
             return self.format_string.format(value)
         return value
 

+ 1 - 0
netbox/templates/dcim/devicetype/attrs/height.html

@@ -0,0 +1 @@
+{{ value|floatformat }}U