2 回答
TA贡献1804条经验 获得超2个赞
您可以按使用 annotate 创建的字段进行排序:
from django.db.models import IntegerField, Value as V
from django.db.models.functions import Cast, StrIndex, Substr
last = (
Machine.objects.annotate(
part=Cast(Substr("deviceSerialNo", StrIndex("deviceSerialNo", V("-"))), IntegerField())
)
.order_by("part")
.first()
.deviceSerialNo
)
就像你让我们从获取-字符的索引开始:
StrIndex('deviceSerialNo', V('-'))
然后我们利用Substr得到包括-字符的第二部分:
Substr("deviceSerialNo", StrIndex("deviceSerialNo", V("-")))
然后我们将它转换为一个 IntegerField,排序并得到第一个对象。注意:我们可以得到第一个对象,因为 的整数转换"-12344"是负数。
TA贡献1862条经验 获得超6个赞
如果数字有多个 - 并且想要从反向中提取数字,请尝试以下操作。AB-12-12344
输出:12344
qs.annotate(
r_part=Reverse('number')
).annotate(
part=Reverse(
Cast(
Substr("r_part", 1, StrIndex("r_part", V("-")))
),
IntegerField()
)
)
谢谢
添加回答
举报