2013-04-09 102 views
7

有沒有人知道我可以排序(在這個實例的日期)我的Django查詢設置今天的日期?如何根據今天的日期對我的Django查詢集進行排序?

class Person(models.Model): 
    name = models.CharField(max_length=50) 
    date = models.DateField() 

我的目標是列出名稱和日期條目。列表頂部將是與當前日期(日/月)最接近的日期的條目。

+1

「排序」是什麼意思?您可以使用普通的'.order_by('date')'按日期排序。 – 2013-04-09 20:26:04

+0

@PavelAnossov我猜他的意思是'[今天,2天前,3天以後,4天前,...]' - 相對於今天的排序 – karthikr 2013-04-09 20:37:41

+0

你能否提供樣本輸出 – catherine 2013-04-12 07:26:54

回答

6

您可以使用extra查詢集的方法來選擇從數據庫表中的其他數據。

這個例子與MySQL的工作原理:

Person.objects.extra(select={ 
    'datediff': 'ABS(DATEDIFF(date, NOW()))'}).order_by('datediff') 

DATEDIFF - 返回天差bewteen兩個日期, ABS - 收益絕對值。對於sqlite,有不同的語法,請參見answer

編輯:用當年

Person.objects.extra(select={ 
    'datediff': "ABS(DATEDIFF(CONCAT(YEAR(now()), '-', MONTH(date), '-', DAY(date)), NOW()))"} 
).order_by('datediff') 

編輯2:優化*

from datetime import date 
dayofyear = int(date.today().strftime("%j")) 

datediff = 'LEAST(ABS(DAYOFYEAR(date) - %d), ABS((366 - %d + DAYOFYEAR(date))) MOD 366)' % (
     dayofyear, dayofyear 
    ) 
Person.objects.extra(select={'datediff': datediff}).order_by('datediff') 

編輯3:最接近的日期發出後(今天的)日期

from datetime import date 
    dayofyear = int(date.today().strftime("%j")) 

    datediff = '(DAYOFYEAR(date) - %d + 365) MOD 365' % (
      dayofyear 
     ) 
    Persion.objects.extra(select={'datediff': datediff}).order_by('datediff') 
+0

謝謝,我認爲這將工作,如果我可以執行此查詢,但沒有一年,即最近的日期/月份到當前日期。 – felix001 2013-04-14 17:01:47

+0

你是什麼意思,但「沒有這一年」 - 你的意思是04-15-1999會在04-01-2013之前(假設當前日期是04-15-2013) – bmihelac 2013-04-15 07:01:43

+0

所以如果你有12 -4-1980和1-4-1991,日期是9-4-2013,然後12-4-1980會排在第一位。即我只想使用月份和日期對日期進行排序,因爲每個日期都將用作生日日期。所以我想看看最近的生日。 – felix001 2013-04-15 10:03:12

0

如果您想根據日期進行排序,您可以在結果查詢集上訂購爲:.order_by('date')

我不確定這是否回答你的問題。在你的意思是你想只選擇今天的日期的人的情況下,你可以使用:

import datetime 
now = datetime.datetime.now() 
persons_with_date_today = Person.objects.filter(date=now) 
+0

這是篩選結果,OP需要根據今天的日期對其進行排序 – karthikr 2013-04-09 20:32:51

+0

我知道,這也是我的答案 - 但由於OP的措詞含糊不清,我還在需要過濾的情況下添加了解釋。 – Javaaaa 2013-04-09 20:35:23

+0

問題是,相對於現在的時間戳差異遞增排序 – karthikr 2013-04-09 20:36:22

相關問題