Django 模型时间戳范围过滤器
Django model time stamp range filter
我有一个模型字段 time_stamp = models.DateTimeField(timezone.now)
。现在我想根据日期范围进行搜索,例如 2016-11-08 到 2016-12-08。我该怎么做。
https://docs.djangoproject.com/en/1.10/ref/models/querysets/#range
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
Model.objects.filter(time_stamp__range=["2016-11-08", "2016-12-08"])
链接Django database query: How to filter objects by date range?
来自 range
查找的文档:
Filtering a DateTimeField
with dates won’t include items on the last day, because the bounds are interpreted as “0am on the given date”.
考虑到这一点,如果您想要最后日期的项目,即 2016-12-08
,您可以考虑在过滤中使用 2016-12-09
。
import datetime
start_date = datetime.date(2016, 11, 8)
# use the day after 2016-12-08 to include it
end_date = datetime.date(2016, 12, 9)
Model.objects.filter(time_stamp__range=(start_date, end_date))
或者,使用 gte
和 lte
查找:
import datetime
start_date = datetime.date(2016, 11, 8)
end_date = datetime.date(2016, 12, 8)
Model.objects.filter(time_stamp__gte=start_date, time_stamp__lte=end_date))
如果您的 django 版本 >= 1.9,您可以在日期时间字段上使用 date
强制转换。
Model.objects.filter(time_stamp__date__gte=start_date, time_stamp__date__lte=end_date)
这也会考虑时区转换。其他答案的问题是他们没有考虑过滤是在 datetime
字段上完成的。
关于此的 Django 文档:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#date
我有一个模型字段 time_stamp = models.DateTimeField(timezone.now)
。现在我想根据日期范围进行搜索,例如 2016-11-08 到 2016-12-08。我该怎么做。
https://docs.djangoproject.com/en/1.10/ref/models/querysets/#range
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
Model.objects.filter(time_stamp__range=["2016-11-08", "2016-12-08"])
链接Django database query: How to filter objects by date range?
来自 range
查找的文档:
Filtering a
DateTimeField
with dates won’t include items on the last day, because the bounds are interpreted as “0am on the given date”.
考虑到这一点,如果您想要最后日期的项目,即 2016-12-08
,您可以考虑在过滤中使用 2016-12-09
。
import datetime
start_date = datetime.date(2016, 11, 8)
# use the day after 2016-12-08 to include it
end_date = datetime.date(2016, 12, 9)
Model.objects.filter(time_stamp__range=(start_date, end_date))
或者,使用 gte
和 lte
查找:
import datetime
start_date = datetime.date(2016, 11, 8)
end_date = datetime.date(2016, 12, 8)
Model.objects.filter(time_stamp__gte=start_date, time_stamp__lte=end_date))
如果您的 django 版本 >= 1.9,您可以在日期时间字段上使用 date
强制转换。
Model.objects.filter(time_stamp__date__gte=start_date, time_stamp__date__lte=end_date)
这也会考虑时区转换。其他答案的问题是他们没有考虑过滤是在 datetime
字段上完成的。
关于此的 Django 文档:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#date