我有一个包含datefield
的模型。我正在尝试获取包含当前星期(从星期一开始)的模型的查询集。
因此,由于djangodatefield
包含简单的datetime.date
模型,我假设使用.isocalendar()
进行过滤。从逻辑上讲,这正是我想要的,而不需要在今天进行额外的比较和计算。
所以我想要做的基本上是强制.filter
语句在这个逻辑中的行为:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
然而,如何在filter语句中编写它呢?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
将给出错误的结果(与今天相比,而不是本周)。正如挖掘真的一样,我没有注意到任何其他星期的选择…
文件注释:
date.isocalendar()返回3元组,(iso年,iso周数,iso
工作日)。
更新:
虽然我不喜欢使用范围的解决方案,但它是最好的选择。
不过,在我的例子中,我做了一个标记周初的变量,它的值看起来更大或相等,因为如果我要查找的是本周的匹配项。如果给出一周的数字,则需要两端都给出。
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
最佳答案
你不能这样做。记住,这不仅仅是Python支持的问题,Django必须将过滤器与数据库通信,数据库不支持如此复杂的日期计算。但是,您可以使用带有开始日期和结束日期的__range
。