biegnę Django 1.9 z nowym JSONField i mieć następujący model testowy:Django filtrować JSONField listę dicts
class Test(TimeStampedModel):
actions = JSONField()
Powiedzmy akcja JSONField wygląda następująco:
[
{
"fixed_key_1": "foo1",
"fixed_key_2": {
"random_key_1": "bar1",
"random_key_2": "bar2",
}
},
{
"fixed_key_1": "foo2",
"fixed_key_2": {
"random_key_3": "bar2",
"random_key_4": "bar3",
}
}
]
chcę móc filtrować klucze foo1 i foo2 dla każdego elementu listy. Kiedy zrobić:
>>> Test.objects.filter(actions__1__fixed_key_1="foo2")
test jest w queryset. Ale kiedy to zrobię:
>>> Test.objects.filter(actions__0__fixed_key_1="foo2")
To nie jest, co ma sens. Chcę zrobić coś takiego:
>>> Test.objects.filter(actions__values__fixed_key_1="foo2")
Albo
>>> Test.objects.filter(actions__values__fixed_key_2__values__contains="bar3")
I mieć testu w queryset.
Każdy pomysł, czy można to zrobić i jak?
Właściwie używam już pola modelu specyficznego dla PostgreSQL-a JSONField ('from django.contrib.postgres.fields import JSONField').Twoje rozwiązanie działa, gdy znana jest 'twoja_właściwość' (' fixed_key_1' i 'fixed_key_2' w moim przypadku), ale jak mam zrobić, gdy nie znam' twojej_właściwości' ("random_key_ #" w moim przypadku)? – Scentle5S
Powinieneś zrobić '{'fixed_key_1': 'foo2'}' 'twój parametr, zaktualizowałem kod za pomocą ogólnej funkcji. – DhiaTN
Chodzi o to, że nie znam szczególnie 'twojej_property'. Może to być cokolwiek i nawet o to nie dbam, chcę tylko wiedzieć, czy JSONField zawiera dany łańcuch w dowolnej jego wartości, bez względu na głębokość. – Scentle5S