我正试图找出一种方法来查询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'})