我们在设置商品价格的时候,希望保留两位小数,FloatField是浮点数无法精确小数点几位,DecimalField可以精确几位小数点
models.py设置商品表模型的时候,可以把商品价格设置DecimalField
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(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=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
python测试开发django-rest-framework-92.反序列化(ModelSerializer)之DecimalField保留2位小数
原文:https://www.cnblogs.com/yoyoketang/p/14348440.html