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)
我是不是用错了?:
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)