如何在Django中按日期范围筛选查询对象?

2024-04-25 08:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个模型中有一个字段,比如:

class Sample(models.Model):
    date = fields.DateField(auto_now=False)

现在,我需要按日期范围过滤对象。

如何筛选日期介于1-Jan-201131-Jan-2011之间的所有对象?


Tags: sample对象模型falsefieldsautodatemodel
3条回答

使用筛选器执行django ranges时,请确保知道使用日期对象与使用日期时间对象之间的区别。__范围在日期上是包含的,但如果使用datetime对象作为结束日期,则如果未设置时间,则该范围将不包含当天的条目。

    startdate = date.today()
    enddate = startdate + timedelta(days=6)
    Sample.objects.filter(date__range=[startdate, enddate])

返回从开始日期到结束日期的所有条目,包括这些日期的条目。糟糕的例子,因为这是一周后返回的条目,但你得到了漂移。

    startdate = datetime.today()
    enddate = startdate + timedelta(days=6)
    Sample.objects.filter(date__range=[startdate, enddate])

将丢失24小时的条目,具体取决于日期字段的时间设置。

可以将django's ^{}^{} objects一起使用:

import datetime
samples = Sample.objects.filter(sampledate__gte=datetime.date(2011, 1, 1),
                                sampledate__lte=datetime.date(2011, 1, 31))

使用

Sample.objects.filter(date__range=["2011-01-01", "2011-01-31"])

或者,如果您只是尝试按月份筛选:

Sample.objects.filter(date__year='2011', 
                      date__month='01')

编辑

正如Bernhard Vallant所说,如果您想要一个排除specified range ends的queryset,您应该考虑使用gt/lt(大于/小于)的his solution

相关问题 更多 >