[英]How to set a default queryset for DateFromToRangeFilter in django-filter?
我有一个过滤器,在它上面设置了一个日期范围过滤器。
class UtenteActivityFilter(django_filters.FilterSet):
date = django_filters.DateFromToRangeFilter(widget=RangeWidget(attrs={"class": "form-control"}))
class Meta:
model = Activity
fields = ['date']
我正在使用此过滤器来填充表格。
class UtenteDetail(LoginRequiredMixin, DetailView):
model = Utente
template_name = 'users/utente_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
f = UtenteActivityFilter(self.request.GET, queryset=Activity.objects.filter(author=self.object))
context['filter'] = f
return context
现在,当我在过滤器中未设置任何日期的情况下加载页面时,我的表将由查询集中的所有数据填充。
如何将过滤器的初始 state 设置为定义的值(或查询集)?
我希望我的表格在第一次打开页面时仅显示“今天”的活动,但仍然能够在所有模型中进行过滤。
我已经为“今天”定义了一个 qs 的活动:
# context['today_activities'] = Activity.objects.filter(created__gte=timezone.now().replace(hour=0,minute=0,second=0))
但将其设置为查询集将过滤限制为仅
一种方法是重新定义qs
属性。
@property
def qs(self):
parent = super().qs
if not self.is_valid():
# add default daterange for today
start_date = timezone.now().replace(hour=0, minute=0, second=0)
end_date = timezone.now().replace(hour=23, minute=59, second=59)
field_name = "date"
lookup_gte = "%s__gte" % (field_name)
lookup_lte = "%s__lte" % (field_name)
kwargs = {lookup_gte: start_date, lookup_lte: end_date}
return parent.filter(**kwargs)
else:
return parent
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.