在django数据模型中,有没有办法为postgres表中存储的每个json属性创建数据字段?

时间:2015-06-12 18:01:56

标签: python json django postgresql

假设我有以下Postgres表,其中包含一个包含json值的列:

    +----+-------------------------------------------------+
    | id |                     record                      |
    +----+-------------------------------------------------+
    |  1 | {"0":"1st value","1":"a value","2":"I value"}   |
    |  2 | {"0":"2nd value","1":"b value","2":"II value"}  |
    |  3 | {"0":"3rd value","1":"c value","2":"III value"} |
    |  4 | {"0":"4th value","1":"d value","2":"IV value"}  |
    +----+-------------------------------------------------+

我想为这个表创建一个django数据模型,其中每个json属性都有一个字段。像这样:

    class RecordTable(models.Model):
        id = models.IntegerField(primary_key=True)
        zero = models.TextField(db_column='record->\'0\'')
        one = models.TextField(db_column='record->\'1\'')
        two = models.TextField(db_column='record->\'2\'')

        class Meta:
            db_table = 'record_table'

这很接近,但不会产生我想要的那种查询。由于它如何处理列名,Django最终将生成如下所示的select语句:

    SELECT DISTINCT "record_table"."record->'0'" FROM "record_table" ...

当我真的希望生成的查询看起来像这样(注意记录 - >' 0')周围缺少引号:

    SELECT DISTINCT "record_table".record->'0' FROM "record_table" ...

我查看了有关自定义字段和自定义管理器的文档,但我还没有找到任何允许我将json值拆分为多个数据字段的功能。这可能吗?如果是这样,我将如何做这样的事情?

1 个答案:

答案 0 :(得分:1)

Django 1.8有HStoreField你可能会觉得有用,而Django 1.9会有JSONField

但是,我不认为让多个Django字段引用表中的同一列是可行的。