web-dev-qa-db-fra.com

Django Filtrage JSONField

J'utilise PostgreSQL et ce nouveau champ de Django 1.9, JSONField. J'ai donc obtenu les données suivantes:

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

J'essaie de comprendre comment filtrer dans cette liste de json. J'ai essayé quelque chose comme: object.filter(data__contains={'animal': 'cat'} mais je sais que ce n'est pas le chemin. J'ai aussi pensé à obtenir cette valeur et à la filtrer dans mon code:

[x for x in data if x['animal'] == 'cat']
15
ezdookie

Selon le Django documents JSONField , il explique que la structure data correspond à python format natif, avec une approche légèrement différente lors de l'interrogation.

Si vous connaissez la structure du JSON, vous pouvez également filtrer les clés comme s'il s'agissait de champs liés:

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

Par accès à la baie:

object.filter(data__0__animal='cat')

Votre contient exemple est presque correct, mais vos données sont dans une liste et nécessitent:

object.filter(data__contains=[{'animal': 'cat'}])
28
Airith