Frage

Ich weiß, wie Filter zu bauen und Q-Objekte in django, aber ich weiß nicht, wie die Betreiber negieren, dass die API bereitstellt, zum Beispiel für den Operator enthält würde ich so etwas wie notcontains mag.

z.

q=Q(name__notcontains="SomeString")

Dies würde hol mir alle Objekte, deren Namen nicht enthalten „Somestring“.

Gibt es eine Syntax, dass ich fehle?

Danke.

War es hilfreich?

Lösung

Sie können mit exclude() anstelle von filter():

Entry.objects.exclude(name__contains="SomeString")

( "Gib mir alle Einträge mit Ausnahme der mit names mit "Somestring")

Und wenn sie mit Q-Objekt zu tun können Sie mit „~“ Symbol vor Q Objekt Negation darzustellen. Zum Beispiel die folgende Anweisung bedeutet „Gib mir alle Einträge mit names mit‚Elephant‘, aber nicht mit‚Somestring‘:

Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

In einigen Fällen können Sie beide Methoden verwenden möchten:

Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

( "Gib mir alle Einträge, mit Ausnahme derjenigen mit names mit "Elephant", aber nicht mit "Somestring")

Andere Tipps

Hier ist die QuerySet API-Referenz . exclude scheint zu tun, was Sie wollen.

So oder Verwendung exclude wie Hank schlägt vor, oder, für den bestimmten contains Fall Verwendung Q (name__regex = r ‚! (Somestring)‘), wenn Sie wirklich wirklich die filter verwenden müssen. Seien Sie gewarnt, wenn das regex nicht Datenbank-agnostisch ist, überprüfen, was zuerst Ihre db unterstützt Syntax.

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