python - 如何过滤本周的 django 查询集

标签 python django

我正在编写此客户管理过滤器,仅需要过滤本周/本周的查询集。我怎样才能实现这个目标

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

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

最佳答案

我认为获取本周的第一天和最后一天并执行过滤可能会更容易。还可以使用 __week lookup [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=<b>(week_start.weekday()-1)%7</b>)

关于python - 如何过滤本周的 django 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164367/

相关文章:

python - 如何使用 PLY (Python Lex-Yacc) 丢弃语法文件中的非终结符

python - Django 开发服务器错误 : image not found

Django South 克隆项目

python - 使用 python 读取文本文件中两个字符串之间的行

python - 在 Python 中遍历锯齿状数组值和索引

python - 如何解决 selenium python 中的嵌套循环问题

python - 为什么这段代码无法在Python中的另一个函数中调用函数

python - Django:将错误发送给管理员并将响应返回给用户

python - Django:覆盖自定义表单的 __init__

python - Django QuerySet 按反向外键匹配数排序