在 Django JSONField 中搜索值列表

Searching for list of values in a Django JSONField

所以我得到了这个 modelJSONField -

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

ref_det 以这种格式存储值

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

模型的每个对象都有其 ref_det 作为这两个值的字典。

现在我有了这个用户 ID 列表 - user_ids - 我想从模型中获取那些对象,其中 ref_det 字段中的 user_id 键包含任何这些对象user_iduser_ids 列表中。

因此,如果我有 user_ids = ['2231', '973','431'],我应该得到那些 Details 个对象,其 ref_detuser_id 作为列表中的 3 个值中的任何一个。

我尝试通过 contains 进行查找,但我认为它只支持查找单个值而不是列表。

我认为 __values__contains (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield) 适合这个用例,但话又说回来,我没有 HStoreField.

有谁知道我该如何度过这个难关?

谢谢!

Django 1.10 或更高版本:

你可以这样试试:

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

Django 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 尝试过此操作,但我认为,您可以在 JSONField(reference).