【问题标题】:Django - order_by a queryset using the INT part of a fieldDjango - order_by 使用字段的 INT 部分的查询集
【发布时间】:2021-08-30 09:42:54
【问题描述】:

我有这个问题:

qs = MyObject.objects.all()

在我的 MyObject 模型中,我有 case_number 字段。它是一个 CharField,值是 int 和 string 的组合,如“123abc”。

我想通过 case_number 字段的 int 部分订购我的查询集。示例:

['34ohkj', '456kKJj', '12jk'] -> ['12jk', '34ohkj', '456kKJj']

我试过了,但它不起作用,因为我无法删除case_number的字符串部分:

qs.annotate(case_number_int=Cast(F('case_number'), IntegerField())).order_by('case_number_int')

任何帮助将不胜感激!

【问题讨论】:

标签: python sql django


【解决方案1】:
qs = MyObject.objects.all()

# I think this is the optimal solution. 

qs = qs.extra(select={
              'case_number_int': "Cast(F('case_number'), IntegerField()))"
    })

现在您可以按此执行订单。例如 qs = qs.order_by('case_number_int')

【讨论】:

  • 这不能回答我的问题,我想将其应用到查询集中,而不仅仅是简单的字符串。
  • 抱歉之前的回答。现在我已经做出改变了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2023-01-22
相关资源
最近更新 更多