Frage

Gibt es in Django, ein Standard-Weg, um komplexe, benutzerdefinierte Filter für QuerySets zu schreiben?

Wie kann ich schreiben

MyClass.objects.all().filter(field=val)

Ich möchte etwas tun:

MyClass.objects.all().filter(customFilter)

Ich kann einen Generator Ausdruck verwende

(x for x in MyClass.objects.all() if customFilter(x))

, aber das würde die Verkettbarkeit verlieren und was auch immer andere Funktionen die QuerySets liefern.

War es hilfreich?

Lösung

Ich glaube, Sie können benutzerdefinierte benötigen Manager .

Andere Tipps

Die Empfehlung Methoden zu beginnen Manager gut ist, aber Ihre Frage mehr direkt zu beantworten: ja, verwenden Sie Q-Objekte . Zum Beispiel:

from django.db.models import Q

complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000)

MyModel.objects.filter(complexQuery)
|

Q-Objekte können kombiniert werden mit (OR) & (AND) und ~ (NOT).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top