我需要注释一个值,该值保存在同一模型的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中刚刚出现,允许更深入的访问模式。