我有一个包含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

08-19 19:50