Jelajahi Sumber

Fixes: #18038 - Ensure DeviceType._abs_weight is stored as an integer (#18039)

* Coerce _abs_weight to int to prevent disagreement with PositiveBigIntegerField deserialization

* Perform coercion in to_grams
bctiemann 1 tahun lalu
induk
melakukan
e36f23ed03
1 mengubah file dengan 6 tambahan dan 6 penghapusan
  1. 6 6
      netbox/utilities/conversion.py

+ 6 - 6
netbox/utilities/conversion.py

@@ -10,9 +10,9 @@ __all__ = (
 )
 
 
-def to_grams(weight, unit):
+def to_grams(weight, unit) -> int:
     """
-    Convert the given weight to kilograms.
+    Convert the given weight to integer grams.
     """
     try:
         if weight < 0:
@@ -21,13 +21,13 @@ def to_grams(weight, unit):
         raise TypeError(_("Invalid value '{weight}' for weight (must be a number)").format(weight=weight))
 
     if unit == WeightUnitChoices.UNIT_KILOGRAM:
-        return weight * 1000
+        return int(weight * 1000)
     if unit == WeightUnitChoices.UNIT_GRAM:
-        return weight
+        return int(weight)
     if unit == WeightUnitChoices.UNIT_POUND:
-        return weight * Decimal(453.592)
+        return int(weight * Decimal(453.592))
     if unit == WeightUnitChoices.UNIT_OUNCE:
-        return weight * Decimal(28.3495)
+        return int(weight * Decimal(28.3495))
     raise ValueError(
         _("Unknown unit {unit}. Must be one of the following: {valid_units}").format(
             unit=unit,