在django查询中减去两个日期

时间:2011-03-07 08:02:31

标签: django model date subtraction

class Case( models.Model ):
created          = models.DateTimeField()    
modified          = models.DateTimeField()

STATUS = (
    ('Active', 'Active'),
    ('Hold', 'Hold'),
    ('Expired', 'Expired'),
    ('Cancelled', 'Cancelled'),
)
status     = models.CharField(max_length=32, choices=STATUS)

现在我想要提取记录,状态已过期不到2个月,只是在2个月之前过期,不应计算在内。

我已阅读__here subtraction of dates,但在我的情况下不起作用。

 expired_cases = Case.objects.filter( status = 'Expired', modified__lt = datetime.now() - timedelta(days=60) ).count()  

这种查询可能有效,但我不想硬编码这段日子。

请帮我解决这个问题。 提前谢谢:)

2 个答案:

答案 0 :(得分:0)

使用python-dateutil模块。从修改后的时间和减去中创建 Python 日期时间对象。它应该工作。

答案 1 :(得分:0)

您可以使用python的日历库返回日期列表。请注意,它不处理闰年,因此您需要为此实现解决方案。

>>> days = calendar.mdays
[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

以这种方式获取当月的日子,然后计算您需要的时间点。您需要从列表中删除第一个元素才能使其正常工作。

>>> days = days[1:]
>>> month = datetime.date.today().month-1 #-1 due to 0-based indexing in list
>>> delta = days[month-1] + days[month-2]