Django фильтрует список объектов json путем сравнения с другим списком
У меня есть модель, в которой есть поле, которое является полем JSON. Это json_поле имеет значение, которое является списком. Используемая база данных - Postgres
model:
attr1:
attr2:
attr3:
json_field: {
jattr1:
jattr2:
array_field: [values ...]
}
У меня есть кверисет, полученный в результате другой операции фильтрации: queryset
Я хочу применить model.objects.filter()
так, чтобы получить все случаи, когда значения поля array_field присутствуют в наборе запросов.
Например: рассмотрим 4 экземпляра
instance1:
json_field: {
array_field: [1, 2, 3, 4]
}
instance2:
json_field: {
array_field: [2, 4]
}
instance3:
json_field: {
array_field: [1, 4]
}
instance4:
json_field: {
array_field: [3]
}
и queryset
есть :
queryset: [2, 3]
Я ожидаю что-то вроде этого:
Model.objects.filter(json_field__array_field__in=queryset)
# This should return
instance1:
json_field: {
array_field: [1, 2, 3, 4]
}
instance2:
json_field: {
array_field: [2, 4]
}
instance4:
json_field: {
array_field: [3]
}
Спасибо за помощь.
хитрость заключалась в использовании __contains
вместо __in
таким образом
Model.objects.filter(json_field__array_field__contains=queryset)
Приведенный выше запрос выполняет эту работу