我有一个模型,其中包含datefield
. 我正在尝试获取包含当前周(从星期一开始)的模型的查询集。
因此,由于 Djangodatefield
包含简单的datetime.date
模型,我假设使用.isocalendar()
. 从逻辑上讲,这正是我想要的,没有在当前工作日进行额外的比较和计算。
所以我想做的基本上是强制.filter
声明在这个逻辑中表现:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
但是如何在过滤器语句中编写它?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
会给出错误的结果(与今天而不是本周相比)。
作为挖掘真正的http://docs.python.org/library/datetime.html我没有注意到任何其他工作日选项......
文档中的注释:
date.isocalendar() 返回一个三元组,(ISO 年、ISO 周数、ISO 工作日)。
更新:
虽然我不喜欢使用范围的解决方案,但它是最好的选择。但是在我的情况下,我创建了一个标记一周开始的变量,并且看起来更大或相等的值,因为如果我正在寻找本周的匹配项。如果给出周数,则需要两端。
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)