date_from
、date_to
、studentA
およびstudentB
フィルターがあります。
それらの 1 つ、いくつか、すべてを使用して、または一度に 1 つも使用せずに、データをフィルター処理できるようにしたいと考えています。それらのどれも、データ全体が表示されることを意味しません-フィルターは適用されません。
たとえば、日付範囲でフィルタリングすることを選択して送信したとします。選択した期間のデータが表示されます。フォーム (日付範囲フィルター条件) をクリアすると、フィルターが使用されていないため、データ全体が再びポップアップ表示されます。
これを機能させるために、次のように条件を定義しました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))
この条件がなかった場合、上記の手順でフィルターをクリアしたときに、データがポップアップ表示されませんでした。
フィルターが 1 つまたは 2 つある場合、これは問題ではありませんが、フィルターが増えると、コードが急速に成長し始めます。たとえば、多くの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
等々。
私の質問は、フィルターを前後に適用および削除する代替の、冗長ではない方法はありますか (確かにあると思います) ?