我目前很难把头放在Django的Array Field上。我希望做的是拥有一个看起来像这样的数组:
Price(close=[
[1/1/2018, 3.00],
[1/2/2018, 1.00],
])
基本上,它是一个存储日期的数组,该日期后跟绑定到该日期的相应值。但是,到目前为止,我的模型如下:
class Price(models.Model):
close = ArrayField(
models.DecimalField(max_digits=10, decimal_places=4),
size=365,
)
我不确定如何用两种不同类型的字段创建数组,一种是DateTime,另一种是十进制。任何帮助将非常感激。
答案 0 :(得分:0)
您不能混合存储在ArrayField
中的类型。 [1]我建议您更改模型架构(也称为数据库规范化[2])。
这是我的建议
from django.db import models
class Price(models.Model):
pass
class PriceItem(models.Model):
datetime = models.DateTimeField()
ammount = models.DecimalField(max_digits=10, decimal_places=4)
price = models.ForeignKey(Price, on_delete=models.CASCADE)
答案 1 :(得分:0)
这取决于它对模型的重要性。
postgresql提供composite types
psycopg2(django的posgresql驱动程序)的慷慨捐助者正在支持it,
在postgresql中定义此类型:
CREATE TYPE date_price AS (
start date,
float8 price
);
并使用the methods described here来实现CompositeField
from django.db import models
from django.contrib.postgres.fields import ArrayField
from django.db import connection
from psycopg2.extras import register_composite
# register the composite
register_composite('date_price', connection.cursor().cursor)
# CompositeField implementation here . . . . . .
class DatePriceField(CompositeField):
'''
DatePriceField specifics
'''
pass
class Price(models.Model):
close = ArrayField(base_field=DatePriceField(), size=365,)
我将遵循这条路线并尽快更新。