Jac*_*Leo 10 python django iso date filter
我有一个包含的模型datefield
.我正在尝试获取包含当前周的模型的查询集(从星期一开始).
因为Django datefield
包含简单datetime.date
模型,我假设使用过滤器.isocalendar()
.从逻辑上讲,这正是我想要的,没有额外的比较和当前工作日的计算.
所以我想要做的就是强制.filter
语句在这个逻辑中表现:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Run Code Online (Sandbox Code Playgroud)
然而如何在filter语句中编写它?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
会给出错误的结果(与今天比较本周不一样).
正如挖掘真实http://docs.python.org/library/datetime.html我没有注意到任何其他工作日选项......
文档说明:
date.isocalendar()返回3元组(ISO年份,ISO周编号,ISO工作日).
更新:
虽然我不喜欢使用范围的解决方案,但它是最好的选择.但是在我的情况下,我创建了一个标记本周开始的变量,只是看起来更大或相等的值,因为如果我正在寻找本周的匹配.如果给出一周的数量它将需要两端.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
Run Code Online (Sandbox Code Playgroud)
你无法做到这一点.请记住,这不仅仅是Python支持的问题,Django必须将过滤器传递给数据库,并且数据库不支持这种复杂的日期计算.但是,您可以使用__range
开始日期和结束日期.
比使用Extract
Amit 在他的答案中提到的函数更简单的是使用Django 1.11 中添加的__week
字段查找,因此您可以简单地执行以下操作:
.filter(model__date__week=datetime.date.today().isocalendar()[1])
Run Code Online (Sandbox Code Playgroud)