2016-10-12 5 views
2

В Джанго 1,9 (с использованием postgresdb), мы используем JSONField (в модели), элементы которого выглядит примерно так:django postgres JSONField | запрос, чтобы проверить, в списке (содержит) значений

**Entry 1**(in a row of that table): 
data: { 
    "key1": "value1", 
    "key2": "value2", 
    "key3": "value3", 
    "key4": "value4" 
} 

**Entry 2**(in a row of that table): 
data: { 
    "key5": "value4", 
    "key6": "value2", 
    "key7": "value2", 
    "key8": "value4" 
} 

Я хочу, чтобы запросить в значения, что-то вроде data__value__contains = 'value4'

Джанго имеет поддержку "ключи" (has_key, has_any_keys, has_keys) связанные запросы

Wh у вас был бы хороший подход к запросам на вышеуказанную потребность?

ответ

0

Как насчет использования HStoreField вместо JSONField, который затем дает вам доступ к поиску values.

MyModel.objects.filter(data__values__contains='value4') 

Как указано в Django docs, JSON поле имеет только этот поиск:

Сдерживание и ключ operations¶

JSONField акция Lookups, относящуюся к локализации и ключам с HStoreField.

  • содержит (принимает любой JSON, а не только словарь строк)
  • contained_by (принимает любой JSON, а не только словарь строк)
  • has_key
  • has_any_keys
  • has_keys