我正试图找出一种方法来查询postgres JSONField中关于我的模型的一个特定实例的数据。
从我所看到的情况来看,所有的用例都是用于类似于如果您有一个属性JSONField,然后选择您的模型的所有实例,其中attributes->>color='red'或其他。
让我们举一个更真实的例子,假设我们有一个模型Shoe,它有价格和数量等字段,还有一个名为versions的JSONField,它是一个对象数组,每个对象都有使每个版本特殊的东西。
因此,如果鞋模型的一个实例是Air Jordans,那么JSONField的属性可能如下所示:

[
    {
        color: black,
        edition: limited,
        tongueColor: red
    },
    {
        color: black,
        edition: standard
    },
    {
        color: gold,
        edition: fancy,
        bright: very
    }
]

所以我们可以做两件事:
查询所有鞋的型号,有一个可用的版本,颜色:黑色(这将返回我们的空气乔丹,加上可能其他鞋),或
查询JSONField版本中color=black的所有对象的模型实例。所以,如果我们已经有了Shoe.objects.filter(name='Air Jordans')或其他东西,可以在最后附加一些方法或其他东西来返回前面两个对象,在color == black的位置?
我可以在网上找到做第一个的例子,但不是第二个。
我可以将对象放入内存并从中进行过滤,但是这个JSONField是我希望存储大量任意数据的地方,因此能够在不将整个blob放入内存的情况下进行查询是相当重要的。JSONField能支持吗?

最佳答案

这可能对你有用:

Shoes.objects.filter(yourJsonFieldName__contains={'colors': 'black'})

10-04 10:42