Поиск списка значений в Django JSONField - PullRequest
0 голосов
/ 30 октября 2018

Итак, у меня есть это model с этим JSONField -

class Details(models.Model):
    ref_det = JSONField(null=True, default=dict())

ref_det сохраняет значения в этом формате

{'user_id': '2231', 'org_id': 'qpdkm12'}

Каждый объект модели имеет свой ref_det в виде словаря только этих двух значений.

Теперь у меня есть этот список идентификаторов пользователей - user_ids - и я хочу получить эти объекты из модели, где ключ user_id в своем поле ref_det содержит любой из этих user_id в user_ids список.

Так что, если у меня есть user_ids = ['2231', '973','431'], я должен получить те Details объекты, у которых ref_det имеет user_id, как любое из 3 значений в списке.

Я пытался просмотреть contains, но я думаю, что он поддерживает поиск только по одному значению, а не по списку.

Я думаю __values__contains (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield) подходит для этого варианта использования, но опять же, у меня нет HStoreField.

Кто-нибудь знает, как мне пройти через это?

Спасибо!

1 Ответ

0 голосов
/ 30 октября 2018

Джанго 1.10 или выше:

Вы можете попробовать вот так:

 Details.objects.filter(ref_det__user_id__in=['2231', '973','431'])

Джанго 1,9:

Вы можете попробовать вот так:

 list(filter(lambda x: x.ref_det.get('user_id') in ['2231', '973','431'], Details.objects.all()))  # it will return a list not queryset

К вашему сведению: я пробовал это с Django 1.10.8, но я думаю, вы можете выполнять операции поиска, такие как contains, in, isnull внутри JSONField ( ссылка ).

...