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']
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'}])