Django ORM Cast()从JSON字段返回双引号字符串



我需要注释一个值,该值保存在同一模型的json字段中。(不是最聪明的,但就是这样)。

我是这样注释这个值的:

class SomeModel(BaseModel):
reference_numbers = JSONField(blank=True, null=True)

SomeModel.objects.annotate(
reference=Cast(
F("reference_numbers__some_id"),
output_field=models.CharField(),
)
)

我需要在查询中将其转换为文本/char,因为后续搜索只适用于文本/char(三元组相似性)。

在某种程度上可以工作,但是结果为我的字符串添加了一个额外的引号。像这样:

queryset[0]。引用→"666999",">

关于如何从查询中获得正确的字符串的任何想法?

我也试过只使用一个ExpressionWrapper的输出字段,但因为它没有在SQL中转换类型,当试图执行搜索时,代码会中断,因为它仍然使用jsonb字段。

我也有同样的问题,经过一些研究,我发现这样做的正确方法似乎是KeyTextTransform。下面的代码可能对你有用:

from django.db.models.fields.json import KeyTextTransform
SomeModel.objects.annotate(
reference=KeyTextTransform("some_id", "reference_numbers")
)

如果您的访问模式变得更复杂,您可能需要嵌套它们,参见这里。

还有一个名为KT的查询表达式,它在Django 4.2中刚刚出现,允许更深入的访问模式。

相关内容

  • 没有找到相关文章

最新更新