python測試開發django-rest-framework-92.反序列化(ModelSerializer)之DecimalField保留2位小數


前言

我們在設置商品價格的時候,希望保留兩位小數,FloatField是浮點數無法精確小數點幾位,DecimalField可以精確幾位小數點

DecimalField

models.py設置商品表模型的時候,可以把商品價格設置DecimalField

  • max_digits=10 整數位的長度為10位
  • decimal_places=2 小數點后2位
  • blank=True 允許為空格
  • null=True 允許為空
  • default=0 默認值為0
  • verbose_name="商品價格" 設置字段名稱
class Goods(models.Model):
    """商品表"""

    goods_price = models.DecimalField(max_digits=10, decimal_places=2,
                                      blank=True, null=True,
                                      default=0, verbose_name="商品價格")

提交數據的時候,goods_price 值為12.1 但是查詢出來是保留2位小數點 12.10

寫到數據庫的數據是12.1

序列化DecimalField

關於DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None)相關參數

  • max_digits 數字中允許的最大位數。它必須是 None 或大於等於 decimal_places 的整數。
  • decimal_places 以數字存儲的小數位數。
  • max_value 驗證所提供的數字不大於這個值。
  • min_value 驗證所提供的數字不小於這個值。
  • localize 設置為 True 以便基於當前區域啟用輸入和輸出本地化。這也將強制 coerce_to_string 為 True。默認為 False。請注意,如果在設置文件中設置了 USE_L10N = True,則會啟用數據格式化。
  • coerce_to_string 如果用於表示應返回字符串值,則設置為 True;如果應返回 Decimal 對象,則設置為 False。默認與 COERCE_DECIMAL_TO_STRING 設置中的鍵值相同,除非重寫,否則將為 True。如果序列化器返回 Decimal 對象,則最終輸出格式將由渲染器確定。請注意,設置 localize 會將值強制為 True。
  • rounding 設置量化到配置精度時使用的舍入模式。有效值是 decimal 模塊舍入模式。默認為 None。

序列化goods_price 字段

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


class GoodsSerializer(serializers.ModelSerializer):
    """序列化商品models"""
    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
    update_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)

    goods_price = serializers.DecimalField(max_digits=10,
                                           decimal_places=2,
                                           max_value=10000.00,
                                           min_value=0.00
                                           )

    class Meta:
        model = Goods
        fields = '__all__'  # 返回全部的字段

此時提交成功后,goods_price變成了字符串類型

coerce_to_string 如果用於表示應返回字符串值,則設置為 True;如果應返回 Decimal 對象,則設置為 False。

    goods_price = serializers.DecimalField(max_digits=10,
                                           decimal_places=2,
                                           max_value=10000.00,
                                           min_value=0.00,
                                           coerce_to_string=False
                                           )

這時候返回的是浮點數12.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM