Django 1.10 Postgres JSONField提取特定键

时间:2017-07-15 06:22:20

标签: django postgresql django-jsonfield

我的模型中有一个基于Postgres的JSONField。

class MyModel(models.Model):
    data = JSONField(default=dict)

JSON示例如下:

{
    'key1': 'val1',
    'key2': 'val2'
}

我有多个模型对象,比方说~50。

我正在尝试仅查询key1内的data,并希望获得key1的所有不同值的列表。

我该怎么做?请注意我使用的是Django 1.10。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用has_key

items=MyModel.objects.filter(data__has_key='key1').values_list('data',flat=True)
new_list=[]
for item in items:
    new_list.append(item['key1'])

dist_list=list(set(new_list)) #list of distinct values.

答案 1 :(得分:1)

您可以使用KeyTransform

MyModel.objects.annotate(key1=KeyTransform('key1', 'data')).distinct('key1').values_list('key1', flat=True)