2013-10-16 63 views
0

我有以下幾個排除方式,可以帶回所有在過去兩分鐘內有交易的圖書。我想添加另一個約束,只有在來自一系列商店的情況下才會這樣說。如何在django中添加OR約束來排除查詢?

在SQL這將是其中LOCATION_ID = 1或LOCATION_ID = 2或LOCATION_ID = 3本

書籍有LOCATION_ID

如何申請,爲下面的查詢?

transaction_window = timezone.now() + datetime.timedelta(minutes=-2) 

ts = Book.objects.exclude(book_id__in = Status.objects 
          .filter(transaction_time__gte=transaction_window) 
          .values_list('book_id', flat=True)) 
+0

'Book.objects.exclude(status__transaction_time__gte = transaction_window)' –

回答

2

你可能只是想location__in=(1, 2, 3)

0

使用Q object。它們內置於django並允許更復雜的查找。

0

從您的代碼假設Book模型場book_idStatus還田book_id和這個領域只是普通IntegerField或相似。

from django.db.models import Q 

transaction_window = timezone.now() - datetime.timedelta(minutes=2) 

statuses = Status.objects.filter(transaction_time__gte=transaction_window) 
ts = Book.objects.filter(~Q(book__id__in=statuses) 
         | ~Q(location_id__in=(1, 2, 3))) 

如果我對你的模型的猜測是正確的。