2017-07-15 45 views
0

我的模型中有一个基于Postgres的JSONField。Django 1.10 Postgres JSONField提取特定的键

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

的JSON样本是这样的:

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

我有模型的多个对象,让我们说〜50。

我想查询data中的key1,并且想要获得key1的所有不同值的列表。

我该怎么做?请注意我正在使用Django 1.10。

回答

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. 
0

您可以使用KeyTransform为

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