2016-08-02 1 views
0

Можно ли использовать эту неправду ?:Джанго .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 часть, объект с более ранней датой правильно исключены. instance в этом случае является объектом, значение invoice.sale_date определяет значение date в этом случае, и я также хотел бы его исключить. Кажется, так оно и должно работать, согласно the docs, но, может быть, я читаю это неправильно?

ответ

1

Запрос, который вы выполняете, означает AND. Это означает, что он будет исключать значение sales_date меньше даты И id равно instance.id.

Если я правильно понял, вы можете сделать это следующим образом:

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

Но это то, что я хочу. Я бы хотел, чтобы оба были исключены? –

+0

Ох! Спасибо alot :) –

+0

Если вы не измените запрос, он будет исключать объект с 'invoice__sale_date' меньше даты AND' id = instance.id'. Я думаю, это не то, что вы хотите. –