2013-06-29 16 views
0

如果我有一個帶有start_dateend_date日期字段的Django Employee模型,如何在ORM中使用get來有效地選擇正確的記錄,如果記錄的不同版本隨時間而存在在這些日期字段?Django有效檢索ORM記錄

這樣我就可以有如下記錄:

start_date, end_date, emp 
01/01/2013, 31/01/2013, Emp1 
01/02/2013, 28/02/2013, Employee1 
01/03/2013, 31/12/4000. EmpOne 

如果今天的日期是10/02/2013那麼我想Employee1。類似

東西:

from django.utils import timezone 
current_year = timezone.now().year 
Employee.objects.get(end_date__year=current_year) 

res = Employee.objects.filter(end_date__gt=datetime.now()).order_by('-start_date') 

還是有做同樣的一個更有效的方法?

+0

如果什麼有匹配當前日期,不止一個行? – Alp

+0

記錄只有一個日期有效版本。 – Superdooperhero

+0

您是否在搜索與當前時間相比最接近的end_date? – Alp

回答

1

你的第二個例子看起來不錯。我更正了過濾器參數以匹配您的start_date約束。此外,我增加了更好的性能LIMIT 1[:1]):

now = datetime.now() 
employees = Employee.objects.filter(start_date__lt=now, end_date__gt=now).order_by('-start_date') 
employee = employees[:1][0] if employees else None