【问题标题】:Order by split string django orm按拆分字符串排序 django orm
【发布时间】:2017-11-23 06:19:54
【问题描述】:

我有一个 ID 作为参考编号和年份,格式如下:

1/17
98/15
2/17
112/17
2345/17
67/17
9/17
8974/16

当我使用 django orm 获取我的 ID 时:

obj = MyIDs.objects.filter(run='run_1').order_by('ID')

我按照第一个数字的顺序取出它们:

1/17
112/17
2/17
2345/17
67/17
8974/16
9/17
98/15

但是,由于 / 后面的数字是年份,我想按年份然后数字来订购它们。我可以在 mySQL 中轻松做到这一点(使用子字符串索引等),如果它是一个 python 列表,但我现在不想在将它们发送到我的 html 模板之前处理我的对象 - 有没有办法做到这一点在 orm 中?

【问题讨论】:

    标签: python mysql django orm


    【解决方案1】:

    Django 2.0 目前处于 alpha 阶段,但它具有 StrIndex 函数可能会有所帮助。我没有对此进行测试,但它是你可以做什么的草稿。斜线将保留在字符串中,但由于您只是对其进行排序,我认为这对您来说不是问题。

    MyIDs.objects.filter(run='run_1').annotate(
        slash_pos=StrIndex(F('id'), '/')
    ).annotate(
        y=Substr(F('id'), F('slash_pos'))
    ).order_by('y', 'id')
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 2022-01-13
      • 2023-04-11
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      相关资源
      最近更新 更多