如何过滤当前一周的Django查询集

伊曼纽尔·姆塔利(Emmanuel Mtali)

我正在编写此客户管理员过滤器,该过滤器仅需要过滤当前/本周的查询集。我该如何实现

class WeekFilter(admin.SimpleListFilter):
    title = _("Week")
    parameter_name = "week"

    def lookups(self, request, model_admin):
        return (
            ('1', 'This week'),
        )

    def queryset(self, request, queryset):
        if self.value() == '1':
            return queryset.filter() # HERE

我已经尝试过这个queryset.filter(created_at__week__gte = 1,created-at__week__lte = 7)但它没有按预期工作

威廉·范昂塞姆

我认为仅获取本周的第一天和最后一天并执行过滤可能会更容易。您还可以使用对周号__week查找[Django-doc]进行过滤,但随后我们将获取具有该周号的所有年份的所有记录如果我们将其限制为一年,那么如果将一周分为两年,则可能会出现问题。

如果我们从星期一开始一周,我们可以使用:

from datetime import date, timespan

class WeekFilter(admin.SimpleListFilter):
    title = _("Week")
    parameter_name = "week"

    def lookups(self, request, model_admin):
        return (
            ('1', 'This week'),
        )

    def queryset(self, request, queryset):
        if self.value() == '1':
            week_start = date.today()
            week_start -= timedelta(days=week_start.weekday())
            week_end = week_start + timedelta(days=7)
            return queryset.filter(
                created_at__gte=week_start,
                created_at__lt=week_end
            )
        return queryset

对于从星期日开始的一周,您可以替换week_start为:

            week_start -= timedelta(days=(week_start.weekday()-1)%7)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章