Django复杂过滤器:超时放置列表的末尾,并订购一个开头时间最短的一个?

时间:2014-01-13 19:51:15

标签: python django filter django-queryset

样品有时间放在冰箱里 到目前为止,随着时间的推移最终还是要去寻找和转动样品。

在这种情况下,下面的结果会以超时的最短时间出现。

amostras =  Amostra.objects.order_by('data_fim')

但我不希望如此。 我希望他回到列表上的时间不多了,而且没有时间在列表中获得成功。

amostra4 - 13 / Jan / 2014 15:51:44 =>更少的时间

amostra5 - 13 / Jan / 2014 16:51:44 =>列表的其余部分按时间顺序

amostra6 - 13 / Jan / 2014 16:51:44 =>列表的其余部分按时间顺序

amostra3 - 13 / Jan / 2014 14:51:44 =>超时

amostra2 - 13 / Jan / 2014 14:51:44 =>超时

amostra1 - 13 / Jan / 2014 14:51:44 =>超时

1 个答案:

答案 0 :(得分:0)

解决方法如下:

#postgresql
amostras =  Amostra.objects.extra(select={'controle':'(case when data_fim < current_timestamp then 2 else 1 end)'},order_by=['controle','data_fim'])

#mysql
amostras =  Amostra.objects.extra(select={'controle':'(case when data_fim < now() then 2 else 1 end)'},order_by=['controle','data_fim'])

#sqlite
amostras =  Amostra.objects.extra(select={'controle':"(case when data_fim < datetime('now') then 2 else 1 end)"},order_by=['controle','data_fim'])