使用 Substr 和负值对注释中的查询结果字符串字段进行切片

slice a query result string field in annotation using Substr and negative values

我正在尝试使用 中给出的方法对字段的最后两个字符进行切片并将其注释为查询结果。类似于:

Person.objects.all()\
.annotate(
    code = Substr('str', 1, -2),
)

上面的代码 returns 当我使用负值作为第三个参数时,一个空字符串。我怎样才能做到这一点?

您需要首先为正索引注释一个字段。然后你可以使用 Substr 如下:

Person.objects.annotate(
    PositiveIndex=ExpressionWrapper(Length('str') - 1, output_field=CharField()),
    code=Substr('str', F('PositiveIndex'))
).values('code')