在Django JSONField

时间:2018-10-30 08:20:29

标签: django django-1.9 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-我想从模型中获取这些对象,其中其user_id字段中的ref_det键包含其中的任何{{ 1}}。

因此,如果我有user_id,则应该获取其user_ids具有其user_ids = ['2231', '973','431']作为列表中3个值之一的Details个对象。

我尝试通过ref_det查找,但我认为仅支持单个值而不是列表的查找。

我认为user_idhttps://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield)适用于此用例,但话又说回来,我没有contains

有人知道我该怎么做吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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中进行containsinisnull之类的查找操作)。