Django order_by alpha first then numeric on attribute with both
У меня есть модель, в которой есть атрибут grade
, который является CharField и может быть буквенным или числовым (например, он может содержать любое из следующих значений: "K", "A", "5", "2", "1", "4")
Я пытаюсь .order_by
в своем наборе запросов, но хотел бы, чтобы сначала шли альфа, а затем числовые.
Я хотел бы видеть набор запросов, упорядоченный по "A", "K", "1", "2", "3", но мне трудно этого добиться.
Я видел некоторые решения, которые включают использование .extra()
, но я стараюсь избегать этого, так как в Django.
Каков наилучший способ достичь этого?
my_things = (
Thing.objects.filter(
location__in=locations,
year=current_year,
)
.annotate(first_letter_group=Substr("grade", 1, 1))
.values(
"first_letter_group",
)
.order_by("first_letter_group")
.distinct()
.order_by("grade")
)