2016-10-12 4 views
2

In django 1,9 (postgresdb verwendet wird), verwenden wir JSONField (in einem Modell), deren Einträge in etwa so aussieht:django postgres JSONField | Abfrage in der Liste zu überprüfen (enthält) Werte

**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" 
} 

ich möchte für Werte abfragen in, so etwas wie data__value__contains = 'value4'

Django hat die Unterstützung für "Schlüssel" (has_key, has_any_keys, has_keys) bezogenen fragen

Wh an wäre ein guter Ansatz, nach oben Bedarf zu fragen?

Antwort

0

Wie wäre es mit einer HStoreField anstelle einer JSONField, die dann Zugriff auf eine values Lookup gibt.

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

Wie in der Django docs angegeben, JSON Feld hat nur diese Lookups:

Eindämmung und Schlüssel operations¶

JSONField Aktien Lookups Haltung und Schlüssel mit HStoreField beziehen.

  • enthält (akzeptiert jede JSON und nicht nur ein Wörterbuch von Strings)
  • contained_by (akzeptiert jede JSON und nicht nur ein Wörterbuch von Strings)
  • has_key
  • has_any_keys
  • has_keys
Verwandte Themen