From 35bd6ce92732d621d5842184e564a6493018d160 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 18 Nov 2021 22:17:58 +1100 Subject: [PATCH] Adds a new custom serializer field - InvenTreeDecimalField - Fixes a number of problems with using FloatField --- InvenTree/InvenTree/serializers.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py index d2d00a932c..ab5a27594f 100644 --- a/InvenTree/InvenTree/serializers.py +++ b/InvenTree/InvenTree/serializers.py @@ -296,3 +296,17 @@ class InvenTreeImageSerializerField(serializers.ImageField): return None return os.path.join(str(settings.MEDIA_URL), str(value)) + + +class InvenTreeDecimalField(serializers.FloatField): + """ + Custom serializer for decimal fields. Solves the following issues: + + - The normal DRF DecimalField renders values with trailing zeros + - Using a FloatField can result in rounding issues: https://code.djangoproject.com/ticket/30290 + """ + + def to_internal_value(self, data): + + # Convert the value to a string, and then a decimal + return Decimal(str(data))