按分裂字符串django orm排序

时间:2017-06-20 15:44:59

标签: python mysql django orm

我有一个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?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

我相信this question的答案符合您的要求。简而言之,您可以使用extra函数在django查询中使用自定义SQL。