Django将csv float项目存储在数据库中

时间:2016-06-11 10:56:50

标签: python django csv

我有一个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'

之类的引号

我希望将值存储为浮点数,而不是字符串。如何实现?

2 个答案:

答案 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)