2016-04-03 14 views
0

Ich benutze PostgreSQL und dieses neue Feld von Django 1.9, JSONField. Also habe ich folgende Daten:Django JSONField Filterung

id|data 
1 |[{'animal': 'cat', 'name': 'tom'}, {'animal': 'dog', 'name': 'jerry'}, {'animal': 'dog', 'name': 'garfield'}] 

Ich versuche herauszufinden, wie in dieser Liste von JSON zu filtern. Ich habe versucht, etwas wie: object.filter(data__contains={'animal': 'cat'}, aber ich weiß, das ist nicht der Weg. Auch habe ich bereits in bekommen, diesen Wert zu denken und filtern es in meinem Code:

[x for x in data if x['animal'] == 'cat'] 
+0

Haben Sie das umfangreiche Documentat gelesen ion auf [JSONField abfragen] (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#querying-jsonfield)? Was ist unklar? –

Antwort

4

Gemäß den django JSONField docs, es erklärt, dass die data Struktur paßt Python nativen Format, mit einem etwas anderen Ansatz bei der Abfrage.

Wenn Sie die Struktur des JSON kennen, können Sie auch auf den Tasten auswählen, als ob sie verwandte Bereiche:

object.filter(data__animal='cat') 
object.filter(data__name='tom') 

von Array-Zugriff:

object.filter(data__0__animal='cat') 

Ihr contains Beispiel ist fast richtig , aber Ihre Daten sind in einer Liste und erfordert:

object.filter(data__contains=[{'animal': 'cat'}]) 
+0

das ist es, danke !! nur noch eine Sache, kann ich Daten filtern? Anstelle von 'Tier' habe ich einen Schlüssel namens 'start_date', der ein Datum im Format ISO 8601 enthält. – ezdookie

+0

Ich glaube nicht, dass Sie das können, da sie nur als Zeichenfolgen gespeichert sind. Ich denke, du müsstest alle Daten rausholen und sie dann in Python vergleichen. Wenn es möglich ist, können Sie es testen, indem Sie diesen Vergleich durchführen: 'data__datetime__lte = andere_Datumszeit' oder eine der anderen Abfrageverknüpfungen. – Airith

+0

ja, es funktioniert ... aber nur Zugriff auf ein Element-Array 'data__0__datetime__lte = '2015-03-12''. Haben Sie eine andere Möglichkeit, in der ganzen Liste zu suchen? Danke! – ezdookie

Verwandte Themen