Django .exclude()返回意外结果

时间:2016-08-02 18:44:54

标签: django django-queryset

我是否使用了这个错误?:

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部分,则会正确排除具有较早日期的对象。在这种情况下,instance是一个对象,invoice.sale_date在这种情况下定义date值,我也希望将其排除在外。根据{{​​3}},似乎它应该如何运作,但也许我读错了?

1 个答案:

答案 0 :(得分:1)

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

如果我理解正确,你可以这样做:

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