在 Django JSONField 中搜索值列表
Searching for list of values in a Django JSONField
所以我得到了这个 model
和 JSONField
-
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_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
.
有谁知道我该如何度过这个难关?
谢谢!
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).
所以我得到了这个 model
和 JSONField
-
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_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
.
有谁知道我该如何度过这个难关?
谢谢!
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).