我在一个模型中有一个字段:

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

现在,我需要按日期范围筛选对象。

如何过滤日期在1- january -2011和31- january -2011之间的所有对象?


当前回答

你可以使用django的datetime过滤器。日期对象:

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

其他回答

你可以使用"__range" 例如:

from datetime import datetime
start_date=datetime(2009, 12, 30)
end_date=datetime(2020,12,30)
Sample.objects.filter(date__range=[start_date,end_date])

当使用django范围过滤器时,确保你知道date对象和datetime对象的区别。__range包含日期,但如果你使用一个datetime对象作为结束日期,如果没有设置时间,它将不包括当天的条目。

from datetime import date, timedelta

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

返回从开始日期到结束日期的所有条目,包括这些日期的条目。这是一个糟糕的例子,因为这是在未来一周返回条目,但您可以得到漂移。

from datetime import datetime, timedelta

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

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

模型

date = models.DateField()

View

def get_queryset(self):  

    fromDate = self.request.query_params.get('fromDate',None)
    toDate = self.request.query_params.get('toDate',None)
    response  = yourModel.objects.filter(date__gte=fromDate,date__lte=toDate)
    return response

你可以使用django的datetime过滤器。日期对象:

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

很简单,

YourModel.objects.filter(YOUR_DATE_FIELD__date=timezone.now())

对我有用