我正在编写这个客户管理过滤器,仅需要过滤本周/本周的查询集。我怎样才能实现这个目标
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
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个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 querysetRun Code Online (Sandbox Code Playgroud)
对于从星期日开始的一周,您可以替换week_start为:
week_start -= timedelta(days=(week_start.weekday()-1)%7)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2672 次 |
| 最近记录: |