Django .exclude() 返回意外结果

Django .exclude() returning unexpected results

我是不是用错了?:

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

此 returns 项在指定日期之前 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 部分,则正确排除日期较早的对象。在这种情况下,instance 是一个对象,其 invoice.sale_date 在这种情况下定义了 date 值,我也希望将其排除在外。根据 the docs,这似乎是它应该如何工作的,但也许我读错了?

您正在执行的查询是AND。这意味着它将排除 sales_date 小于 date AND id 等于 instance.id.

如果我没理解错的话,你可以这样做:

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