2017-04-19 3 views
0

Ich habe ein Modell, ich möchte nach seinem Attribut a filtern. Das Modell hat auch ein anderes Attribut b. Ich versuche Einträge zu filtern, in denen a 0 ist oder a den Wert des Attributs b (für jede Zeile, offensichtlich). Wie kann ich nach dem Wert einer anderen Spalte filtern? HierDjango QuerySet: Filter durch den Wert eines anderen Feldes

ist, was ich habe versucht, und das fehlende Stück:

MyModel.objects.filter(Q(a=0) | Q(a=???)) # ??? is to be the value of the `b` column 

Ich verwende Django 1.4 und ich weiß, es ist eine alte Version, die nicht mehr unterstützt wird, aber leider das Upgrade ist nicht bis zu mich.

+0

Haben Sie die Möglichkeit, Ihr Modell zu wechseln? –

+0

F Ausdruck ist in 1.4 verfügbar, es ist genau das, wonach Sie suchen. –

Antwort

2

Ich glaube, Sie ein F expression mit Ihrem Q-Objekt verwenden können, verwenden können:

MyModel.objects.filter(Q(a=0) | Q(a=F('b'))) 

Ich werde auch vorschlagen, dass Sie Planen Sie Ihr Upgrade jetzt, sonst verpassen Sie andere Funktionen und Sicherheitsupdates.

+0

huh, aus irgendeinem Grund dachte ich, dass 'F' Ausdrücke in jüngerer Zeit eingeführt wurden. Vielen Dank. Wie ich bereits erwähnt habe, ist es absolut nicht meine Aufgabe, ein Upgrade durchzuführen, ich wünschte, es wäre so. – dabadaba

1

Sie können das F-Modell zum Vergleichen zweier Felder verwenden.

from django.db.models import F 
MyModel.objects.filter(a__exact = F('b')) 

Also für Ihre gemeinsame Abfrage Sie so etwas wie,

MyModel.objects.filter(Q(a=0) | Q(a__exact=F('b'))) 
+0

Wird überprüft, ob die beiden Werte gleich sind? –

+0

Oh, du meinst einen Wert gleich dem Attribut b, sorry, es war nicht klar aus deiner Frage, lass mich sehen, was ich tun kann. – Osiris92

+0

Lesen Sie die Frage sorgfältig durch, bevor Sie antworten. – Iqbal

Verwandte Themen