所以我有了这个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
-我想从模型中获取这些对象,其中其user_id
字段中的ref_det
键包含其中的任何{{ 1}}。
因此,如果我有user_id
,则应该获取其user_ids
具有其user_ids = ['2231', '973','431']
作为列表中3个值之一的Details
个对象。
我尝试通过ref_det
查找,但我认为仅支持单个值而不是列表的查找。
我认为user_id
(https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield)适用于此用例,但话又说回来,我没有contains
。
有人知道我该怎么做吗?
谢谢!
答案 0 :(得分:2)
您可以尝试这样:
Details.objects.filter(ref_det__user_id__in=['2231', '973','431'])
您可以尝试这样:
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中进行contains
,in
,isnull
之类的查找操作)。