1

我是 Python/Django 的新手,我有一个问题。我需要从多维字典(JSONField)中获取一个按值过滤的 QuerySet。到目前为止,我得到了这个:

def make_cond(name, value):
    from django.utils import simplejson
    cond = simplejson.dumps({key:value})[1:-1] # remove '{' and '}'
    return ' ' + cond # avoid '"'

Post.objects.filter(JSONField__contains=make_cond('key', 'value')) 

这有效,但仅适用于字典的第一维。我怎样才能到达其他维度?

4

1 回答 1

0

SQL 帮不了你。

给定一个序列化可能如下所示的任意 json 对象,

'{"a": {"c": "C", "b": "B"}, "c": {}, "b": {"e": "E", "d": "D"}}'

你必须构造一个 LIKE 子句来匹配,比如说,{"a",然后是另一个{,然后"b": "B"不关心 . 的位置是什么"c": "C"。LIKE 子句只支持前后通配符,所以你不能得到你想要的。

有可能你可以用全文索引来弄清楚;你可以试试 Haystack 或 Sphinx。

不过,这项工作的正确工具是像 mongodb 这样的 NoSQL 数据库。

于 2012-10-25T01:20:18.953 回答