2016-08-02 118 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'排除对象。我认为这不是你想要的。 –