Как преобразовать строку в int и затем отсортировать представление по значению int?

Я хочу отсортировать представление по значению, которое является строкой. но перед этим я хочу преобразовать строку в int и затем отсортировать по нему.

main = models.Main.objects.all().order_by('fore_key__n')

В этом коде fore_key__n является строковым значением, например, '20'

Аннотации и функцииDB, вероятно, могут это сделать. Преобразовать строковое значение в int и затем использовать его для упорядочивания набора запросов. У меня не было повода попробовать это, поэтому рассматривайте следующее как предположение:

 main = models.Main.objects.annotate(
   fkn_int_cast=Cast('fore_key__n', output_field=IntegerField()),
 ).order_by('fkn_int_cast')

В случае, если данные в поле не поддаются преобразованию, он выбросит ошибку django.db.utils.DataError. Поэтому, вероятно, необходимо также применить фильтр regex

 main = models.Main.objects.filter(
   fore_key_n__regex='^[0-9]+$'
 ).annotate(
   fkn_int_cast=Cast('fore_key__n', output_field=IntegerField()),
 ).order_by('fkn_int_cast')

Есть и другие функции БД, которые вы можете использовать, например, для замены запятых в '1,234,456' на нулевые строки, чтобы оно стало Cast'able

Вернуться на верх