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'))
War es hilfreich?

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
scroll top