Вы можете заказать по полю, созданному с аннотацией:
from django.db.models import IntegerField
from django.db.models.functions import Cast, 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"
является отрицательным числом.