13個のチェックボックスのグループが一緒に検索条件を構成するフォームがあります...ALLまたはANYのラジオボタンのペアも追加したことを除いて。
私は次のようなエレガントなもので逃げることを望んでいました:
priority_ids = request.GET.getlist("priority") # checkboxes
collection = request.GET.get("collection") # radio buttons
priorities = []
for priority_id in priority_ids:
priorities.append(Q(focus__priority=priority_id))
if (collection == "any"): qset = any(priorities)
elif (collection == "all"): qset = all(priorities)
ただし、any()とall()はブール値を返しますが、フィルターで使用できるクエリセットは返しません。「Q(...)| Q(...)| Q(...)」または「Q(...)&Q(..」と同等の「any」または「all」が必要です。 。)&Q(...)"1から13の基準まで。