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