如何将字符串转换为 int,然后按 int 值对视图进行排序?

How can i convert string to int and then sort view by int value?

我想按字符串值对视图进行排序。但在此之前,我想将字符串转换为 int 然后按它排序。

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

在这段代码中 fore_key__n 是像 '20' 这样的字符串值

Annotations and DB functions can probably do this. Cast 将字符串值转换为 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。因此,可能还需要应用正则表达式过滤器

 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