Ich habe ein Formular, das eine Gruppe von 13 Kontrollkästchen hat, die zusammen meine Suchkriterien bilden ... außer dass ich auch ein Paar Radio-Buttons für ALLE oder IRGENDEINE hinzugefügt .Auf der Suche nach Django any() und all() auf Querysets
Ich hatte gehofft, weg elegant wie mit etwas zu bekommen:
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)
jedoch jede() und alle() gibt einen boolean, kein queryset, die ich in einem Filter verwenden können. Ich will eine "any" oder "all", die das Äquivalent bedeutet "Q (...) | Q (...) | Q (...)" oder „Q (...) & Q (.. .) & Q (...) "für 1 bis 13 Kriterien.
Beachten Sie, dass Ihre 'lambda's durch' operator.or_' und 'operator.and_' bzw. ersetzt werden. – Dougal
+1, vielen Dank für das zeigen –
Während wir bei ihm sind, könnte auch 'priority_filters = [Q (focus__priority = p_id) für p_id in priority_ids]' :) – Dougal