【发布时间】:2014-09-21 16:55:09
【问题描述】:
到目前为止,我一直在使用 django-daterange_filter 过滤 Django Admin 范围内的日期。 只要日期是模型中的一个字段,它就非常有效。
但是,现在我的date 是模型中的一个属性,所以我使用的是 SimpleListFilter。
这就是我现在一直在做的事情并且效果很好:
class CalibrationFilter(admin.SimpleListFilter):
title = ('Last calibration')
parameter_name = 'calibrationdate'
def lookups(self,request,mode):
return (
('this_week','This week'),
('1_week','Last week'),
('2_week','2 weeks ago'),
('3_week','3 weeks ago'),
)
def queryset(self,request,queryset):
if self.value() == None:
return queryset
if self.value() == 'this_week':
day = date.today()
startdate = week_range(day)[0]
enddate = week_range(day)[1]
shelves = Shelf.objects.raw(""" [..] here is MySQL query with LEFT JOIN [..]
WHERE table.date
BETWEEN '%s' and '%s' """ %
(startdate.strftime('%Y-%m-%d'),
enddate.strftime('%Y-%m-%d'))
)
return queryset.filter(id__in=[a.id for a in shelves])
else:
weeks = '%s' % (self.value())
num_of_weeks , weeks = weeks.split('_',1)
day = date.today() - datetime.timedelta(days=int(num_of_weeks)*7)
startdate = week_range(day)[0]
enddate = week_range(day)[1]
shelves = Shelf.objects.raw(""" [..] here is MySQL query with LEFT JOIN [..]
WHERE table.date
BETWEEN '%s' and '%s' """ %
(startdate.strftime('%Y-%m-%d'),
enddate.strftime('%Y-%m-%d'))
)
return queryset.filter(id__in=[a.id for a in shelves])
week_range() 是一个函数,用于确定我从here 获得的一周的结束和开始。
我希望过滤器中有两个框,From date 和 To date 和 DatePicker,非常类似于 django-daterange_filter 的实现。
我知道我可以在过滤器中添加template,但是如何修改lookups 以同时允许两个变量?
【问题讨论】:
标签: python django date filter django-admin