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]
    ...
然而如何在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)
你无法做到这一点.请记住,这不仅仅是Python支持的问题,Django必须将过滤器传递给数据库,并且数据库不支持这种复杂的日期计算.但是,您可以使用__range开始日期和结束日期.
比使用ExtractAmit 在他的答案中提到的函数更简单的是使用Django 1.11 中添加的__week字段查找,因此您可以简单地执行以下操作:
.filter(model__date__week=datetime.date.today().isocalendar()[1])
| 归档时间: | 
 | 
| 查看次数: | 4319 次 | 
| 最近记录: |