2016-08-02 189 views
0

我使用這個錯誤?:Django的.exclude()返回意外的結果

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

此方法返回在指定日期之前的invoice.sale_date項目。

這是我的輸入:

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) 

和輸出:

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

如果刪除了id=instance.id部,與較早的日期的對象被適當排除。在這種情況下,instanceinvoice.sale_date在這種情況下定義date值的對象,我也希望它被排除。根據the docs,似乎這是應該如何工作的,但也許我讀錯了?

回答

1

您正在執行的查詢意味着AND。這意味着它將排除sales_date小於date且id等於instance.id。

如果我理解正確的話,你可以做這樣的:

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

但是,這就是我想要的。我想都被排除在外? –

+0

哦!非常感謝:) –

+0

如果您不會更改查詢,它將僅使用'invoice__sale_date'小於日期AND'id = instance.id'排除對象。我認爲這不是你想要的。 –