0

如果我有一个Employee带有日期字段的 Django 模型,start_date如果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')

或者有没有更有效的方法来做同样的事情?

4

1 回答 1

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
于 2013-06-29T18:16:31.213 回答