我有一个csv文件,其数据如下:
Company,104.95,102.8,102.6,104.5,104.5,102.75...\n
等
我在
中存储像prices[1:len(prices)]
这样的浮动值
models.CommaSeparatedIntegerField(blank=True, null=True, max_length=10000)
但是在存储值之后,浮点值会得到'104.95','102.8','102.6','104.5','104.5','102.75'
我希望将值存储为浮点数,而不是字符串。如何实现?
答案 0 :(得分:3)
您可以将它们转换为浮点数:
float_prices = [float(p) for p in prices[1:len(prices)]]
也就是说,CommaSeparatedIntegerField
只会验证以逗号分隔的整数列表。字符串和浮点数都不适用于该字段 - 因此,您说您可以保存所发布的数据,这很奇怪。
答案 1 :(得分:0)
改为使用CharField(带有前导_
)
_float_prices = models.CharField(max_length=10000, blank=True)
和带有JSON序列化的@property
装饰器
@property
def float_prices(self):
return json.loads(self._float_prices)
@float_prices.setter
def float_prices(self, li):
self._float_prices = json.dumps(li)
这样,您可以将float_prices
设置为浮点数列表,序列化将通过属性方法自动完成
instance.float_prices = [14.5, 5.2, 9.0]
会将'["14.5", "5.2", "9.0"]'
写入_float_prices
。
或者,带有PostgreSQL的Django 1.9 具有new models.JSONField()
,可以为您float
列表进行序列化。
float_prices = models.JSONField(blank=True)