Django Benutzerdefinierte Queryset Filter
-
21-08-2019 - |
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.
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