Wie gebe ich eine Liste von Qs für OR-Lookups zu filtern?
-
21-08-2019 - |
Frage
Wie kann ich eine Liste von Qs geben für OR-Lookups zu filtern? So etwas wie:
q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?
Ohne eine Liste, die ich tun würde:
Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
Lösung
Verwenden von Python reduzieren () Funktion:
import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)
Andere Tipps
Q-Objekte auch ein add
Verfahren haben, das ein anderes Objekt nimmt Q und einen Q-Anschluss (entweder UND oder ODER).
q_object = Q(xyz__isnull=True)
q_object.add(Q(x__startswith='x'), Q.OR)
Ich habe dies hilfreich erwiesen, wenn die Konstruktion oder Filtern und ich habe ein längeres Beispiel auf meinem Blog geschrieben: "Hinzufügen" Q Objekte in Django
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow