我有date_from
、date_to
和过滤器studentA
。studentB
我希望能够一次使用其中一个、其中一些、全部或一个都不过滤数据。它们都不意味着呈现整个数据 - 没有应用过滤器。
说,我选择按日期范围过滤并提交。我会看到所选时期的数据。现在,如果我清除表单(日期范围过滤条件),整个数据应该会再次弹出 - 因为没有使用过滤器。
为了使这个工作我在我的定义条件views.py
:
if ( form.is_valid()
and len(request.GET['date_from']) > 0
and len(request.GET['date_to']) > 0
):
date_from = form.cleaned_data['date_from']
date_to = form.cleaned_data['date_to']
attendance = Students.objects.filter(
date__range=(date_from, date_to))
如果我没有这个条件,那么,当我从上面的步骤中清除过滤器时,不会弹出任何数据。
当我有一个或两个过滤器时,这不是问题,但是随着更多过滤器的出现,代码开始迅速增长——我必须做很多elif
陈述,例如。
elif ( form.is_valid()
and len(request.GET['date_from']) > 0
and len(request.GET['date_to']) > 0
and len(request.GET['studentA']) > 0
):
# apply this filter
elif ( form.is_valid()
and len(request.GET['studentA']) > 0
):
# apply this one
等等。
我的问题是,是否有任何替代的、不那么冗长的方式来来回应用和删除过滤器(我确定有)?