如果我有一个带有Employee
和start_date
日期字段的Django end_date
模型,如果有不同的版本,我如何在ORM中使用get来有效地选择正确的记录记录是否根据这些日期字段随时间存在?
所以我可以有以下记录:
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 :(得分: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