gpt4 book ai didi

json - 使用 django query set values() 索引到 JSONField

转载 作者:行者123 更新时间:2023-11-29 11:47:13 24 4
gpt4 key购买 nike

我将 django 与 postgres 一起使用,并且在我的模型中有一堆 JSON 字段(其中一些非常大和详细)。我正在从基于 char 的字段切换到 jsonb 字段,这使我可以过滤字段中的键,我想知道是否有任何方法可以获得同等的好处调用查询集 values 方法。

示例:

给定一个带有 options JSONField 的 Car 模型,我想做的是

qset = Car.objects.filter(options__interior__color='red')
vals = qset.values('options__interior__material')

请原谅蹩脚的玩具问题,但希望它能传达这个想法。这里的 filter 调用完全符合我的要求,但是对 values 的调用似乎没有意识到 JSON 字段的特殊性质。我得到一个错误,因为 values 找不到要加入的名为“interior”的字段。是否有其他一些我缺少的语法或选项可以使这项工作正常进行?

似乎是对现有功能的一个非常明显的扩展,但到目前为止,我未能在文档中或通过堆栈溢出或谷歌搜索找到任何对类似内容的引用。

编辑 - 解决方法:

玩玩之后,看起来可以通过在上面两行代码之间插入以下内容来捏造:

qset=qset.annotate(options__interior__material=RawSQL("SELECT options->'interior'->'material'",()))

我说“捏造”是因为它似乎是对符号的滥用,需要对整数索引进行特殊处理。

仍然希望得到更好的答案。

最佳答案

我可以建议使用一种更简洁的方法:

from django.db.models import F, Func, CharField, Value
Car.objects.all().annotate(options__interior__material =
Func(
F('options'),
Value('interior'),
Value('material'),
function='jsonb_extract_path_text'
),
)

关于json - 使用 django query set values() 索引到 JSONField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com