filter by weekday返回空JSON,而它应该为Sunday返回一个对象Django Rest Framework

2024-04-29 09:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这很奇怪,我找不到合适的解决办法。我有一个我正在尝试序列化的工作模型。在我的视图集类中,我有一个函数,该函数根据星期几过滤查询集。根据文档,工作日6是星期日,因此查询集中应该有一个作业。但是,它返回一个空的JSON。 这是应与该查询匹配的对象: expected output

   def get_queryset(self):
    day_query = self.request.GET.get('day')
    if day_query != '' and day_query is not None:
        queryset = Job.objects.filter(dt_start__week_day=day_query)
        return queryset
    else:
        today = datetime.today().weekday()
        queryset = Job.objects.filter(dt_start__week_day=today)

        return queryset

这是视图集函数: enter image description here

如果我为周日硬编码int 1,那么它会工作,这是相当伤脑筋的,对此的一些见解将受到高度赞赏


Tags: 函数selfgettodayreturnobjectsdtjob
1条回答
网友
1楼 · 发布于 2024-04-29 09:12:21

^{} lookup [Django-doc]使用的值与^{} [pyton-doc]返回的值不同。事实上,如果我们看一下__week_day查找的文档,就会发现:

Takes an integer value representing the day of week from 1 (Sunday) to 7 (Saturday).

.weekday()返回:

Return the day of the week as an integer, where Monday is 0 and Sunday is 6.

因此,我们需要首先执行映射:

           | mon tue wed thu fri sat sun
.weekday() |   0   1   2   3   4   5   6
__week_day |   2   3   4   5   6   7   1

我们可以使用((x+1) % 7)+1执行映射,其中x.weekday()的结果:

def get_queryset(self):
    day_query = self.request.GET.get('day')
    if not day_query:
        today = datetime.today().weekday()
        day_query = (today + 1) % 7 + 1
    return Job.objects.filter(dt_start__week_day=day_query)

如果您还指定了day参数,这可能很重要,因为它当然取决于您如何解释该值

相关问题 更多 >