DECIMAL类型字段获取数据变为字符串

时间:2018-04-11 08:36:59

标签: python django django-rest-framework

在我的表格中:

我的折扣类型是DECIMAL:

enter image description here

表格中的数据:

enter image description here

但是为什么当我在API中获取数据时,会得到字符串?

enter image description here

我使用Django / Django-Rest-Framework作为后端。

修改

belong_product:"实体服务器"
ctime:"2018-04-11T15:41:15.744959+08:00"
desc: ""
discount:"0.005"
id : 1
is_enable :false
max_count:5
min_count:0
name:"基数折扣第一阶"
uptime:"2018-04-11T15:41:15.745226+08:00"

我的ListAPI视图:

class DiscountItemByUserOwnCountListAPIView(ListAPIView):
    serializer_class = DiscountItemByUserOwnCountSerializer
    permission_classes = [IsSuperAdmin]
    pagination_class = CommonPagination   
    def get_queryset(self):   
        return DiscountItemByUserOwnCount.objects.all()

我的模特:

class DiscountItemByUserOwnCount(models.Model):
    name = models.CharField(max_length=16, help_text="名称")
    desc = models.CharField(max_length=512, null=True, blank=True, help_text="描述")
    min_count = models.IntegerField(help_text="范围的最小数目")
    max_count = models.IntegerField(help_text="范围的最大数目")  # 最小~最大 组成范围
    discount = models.DecimalField(max_digits=4, decimal_places=3, default=0.000, unique=True,
                                   help_text="折点")  # 折点: 0.001
    belong_product = models.CharField(max_length=16, help_text="所属产品(DISCOUNT_PRODUCT_TYPE中去选择)")

    is_enable = models.BooleanField(default=False, help_text="是否启用")

    ctime = models.DateTimeField(auto_now_add=True)
    uptime = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name
    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['min_count', '-id']

2 个答案:

答案 0 :(得分:0)

DRF中的默认十进制表示形式为字符串,要禁用此行为,请将以下内容添加到settings.py:

REST_FRAMEWORK = {
    'COERCE_DECIMAL_TO_STRING': False,
    # Your other settings  
    ... 
}

请参阅docs

中的详细信息

答案 1 :(得分:0)

这是一个字符串,否则你会得到舍入错误。使用Python shell可以很容易地看到这一点:

config.yml

另请注意,JSON没有小数。只有整数和浮点数。