django DecimalField - 如何将值检索为浮点数?
django DecimalField - how do I retrieve the value as a float?
因此,如果我知道将我的模型数据序列化为 JSON 会有多困难,我绝不会使用 Django 的 DecimalField
选项。
长话短说,如何从 DecimalField
中获取浮点值?
我的模型是这样的:
class DailyReport(models.Model):
earnings = models.DecimalField(max_digits=12, decimal_places=4)
def earnings_float(self):
return self.earnings.to_float()
显然没有 to_float()
方法可用,那么我该怎么做呢?
以下是后来的补充:
这个有效:
class DailyReport(models.Model):
earnings = models.DecimalField(max_digits=12, decimal_places=4)
def earnings_float(self):
return float(self.earnings)
但这似乎也太复杂了。我正在尝试将 django-rest-framework 用于所有序列化,因为我通常将它用于我的应用程序中的 rest-framework 内容。在这种特殊情况下,我只想将我的数据转换并序列化为 python 列表和字典,然后通过 pymongo 3.
将它们作为文档存储在 Mongo 数据库中
只需将 DecimalField 转换为浮点数:
def earnings_float(self):
return float(self.earnings)
浮点数和小数是不一样的。不要为了序列化而将小数转换为浮点数;你会失去精度。
而是使用 DjangoJSONEncoder class 效果很好:
from django.core.serializers import DjangoJSONEncoder
json.dumps(self.earnings, encoder=DjangoJSONEncoder)
可以让序列化程序将其转换为浮点字段。
rest-framework declaring-serializers
from rest_framework import serializers
class DailyReportSerializer(serializers.ModelSerializer):
earnings = serializers.FloatField()
class Meta:
model = DailyReport
fields = ('earnings',)
3.0 提供了将小数序列化为浮点数的选项。
REST_FRAMEWORK = {
'COERCE_DECIMAL_TO_STRING': False
}
因此,如果我知道将我的模型数据序列化为 JSON 会有多困难,我绝不会使用 Django 的 DecimalField
选项。
长话短说,如何从 DecimalField
中获取浮点值?
我的模型是这样的:
class DailyReport(models.Model):
earnings = models.DecimalField(max_digits=12, decimal_places=4)
def earnings_float(self):
return self.earnings.to_float()
显然没有 to_float()
方法可用,那么我该怎么做呢?
以下是后来的补充:
这个有效:
class DailyReport(models.Model):
earnings = models.DecimalField(max_digits=12, decimal_places=4)
def earnings_float(self):
return float(self.earnings)
但这似乎也太复杂了。我正在尝试将 django-rest-framework 用于所有序列化,因为我通常将它用于我的应用程序中的 rest-framework 内容。在这种特殊情况下,我只想将我的数据转换并序列化为 python 列表和字典,然后通过 pymongo 3.
将它们作为文档存储在 Mongo 数据库中只需将 DecimalField 转换为浮点数:
def earnings_float(self):
return float(self.earnings)
浮点数和小数是不一样的。不要为了序列化而将小数转换为浮点数;你会失去精度。
而是使用 DjangoJSONEncoder class 效果很好:
from django.core.serializers import DjangoJSONEncoder
json.dumps(self.earnings, encoder=DjangoJSONEncoder)
可以让序列化程序将其转换为浮点字段。
rest-framework declaring-serializers
from rest_framework import serializers
class DailyReportSerializer(serializers.ModelSerializer):
earnings = serializers.FloatField()
class Meta:
model = DailyReport
fields = ('earnings',)
3.0 提供了将小数序列化为浮点数的选项。
REST_FRAMEWORK = {
'COERCE_DECIMAL_TO_STRING': False
}