繁体   English   中英

如何在 django-filter 中为 DateFromToRangeFilter 设置默认查询集?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM