Django模型时间戳范围过滤器

时间:2016-12-08 06:17:14

标签: python django django-models django-orm

我有一个模型字段time_stamp = models.DateTimeField(timezone.now)。现在我想根据日期范围进行搜索,例如2016-11-08到2016-12-08。我怎么能这样做。

4 个答案:

答案 0 :(得分:0)

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))

答案 1 :(得分:0)

Model.objects.filter(time_stamp__range=["2016-11-08", "2016-12-08"])

链接Django database query: How to filter objects by date range?

答案 2 :(得分:0)

来自range查询的文档:

  

使用日期过滤$(document).on("change", ".cmplregimem .cmpx" , function() { var pro_cat_m = $(this).val(); var text =$(this).parent().parent().prevAll('tr').find('td:first').map(function() { return $(this).find('option:selected').text(); }).get(); 将不包括最后一天的项目,因为边界被解释为“在给定日期的0am”。

考虑到这一点,如果您想要上一个日期的项目,即DateTimeField,您可以考虑在过滤中使用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

答案 3 :(得分:0)

如果你的django版本是> = 1.9,你可以在datetime字段中使用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