2016-08-02 14 views
0

verwende ich das falsch ?:Django .exclude() Rückkehr zu unerwarteten Ergebnissen

qs = self.model.objects.exclude(invoice__sale_date__lt=date, id=instance.id)

Dies gibt Artikel mit einem invoice.sale_date vor dem angegebenen Datum.

Das ist mein Eingang:

print(date) 
print("---") 
qs = self.model.objects.exclude(invoice__sale_date__lt=date, id=instance.id) 
for q in qs: 
    print(q.invoice.sale_date) 

und die Ausgabe:

2015-05-01 
--- 
2015-04-01 
2015-05-01 

Wenn ich entfernen Sie den id=instance.id Teil, das Objekt mit dem früheren Zeitpunkt richtig ausgeschlossen. instance ist in diesem Fall ein Objekt, dessen invoice.sale_date den date Wert in diesem Fall definiert, und ich möchte es auch ausgeschlossen. Es sieht so aus, als ob es funktionieren sollte, laut the docs, aber vielleicht lese ich es falsch?

Antwort

1

Die Abfrage, die Sie ausführen, bedeutet AND. Das bedeutet, dass sales_date weniger als date ausgeschlossen wird UND id gleich instance.id ist.

Wenn ich es richtig verstanden habe, können Sie es wie folgt tun:

qs = self.model.objects.exclude(invoice__sale_date__lt=date).exclude(id=instance.id) 
+0

Aber das ist, was ich will. Ich möchte beide ausgeschlossen sein? –

+0

Ohhh! Danke viel :) –

+0

Wenn Sie die Abfrage nicht ändern, wird es nur Objekt mit 'Rechnung__sale_Datum' weniger als Datum UND' ID = Instanz.ID' ausschließen. Ich denke, es ist nicht das, was du willst. –