2015-03-02 36 views
1

我想使用django ORM執行OR查詢。我提到了this答案,它符合我的需要。django - 使用lambda的OR查詢

我有一個動態生成的整數列表。這些整數代表特定表中的用戶標識。這個表格還有一個日期字段。我想查詢數據庫中給定日期的列表中的所有用戶ID。

例如:從下表,我想爲用戶ID 2和3的記錄,2015年2月28日

id | date 
--------------- 
1 | 2015-02-23 
1 | 2015-02-25 
1 | 2015-02-28 
2 | 2015-02-28 
2 | 2015-03-01 
3 | 2015-02-28 

我無法找出哪些以下兩個應該是完美的日期我的使用情況:

Table.objects.filter(reduce(lambda x, y: (x | y) & Q(date=datetime.date(2015, 2, 28)), [Q(user_id=i) for i in ids]) 

OR

Table.objects.filter(reduce(lambda x, y: (x | y), [Q(user_id=i) for i in ids]) & Q(date=datetime.date(2015, 2, 28)) 

上述兩者現在都產生類似的輸出。如果沒有lambda,下面的查詢會適合我的需要:

Table.objects.filter(Q(user_id=3) & Q(date=datetime.date(2015, 2, 28))| Q(user_id=2) & Q(date=datetime.date(2015, 2, 28))) 

回答

5

我覺得你不需要reduceQ對象在這裏,你可以這樣做:

Table.objects.filter(
    user_id__in=[2,3], 
    date=datetime.date(2015, 2, 28), 
) 
+0

謝謝!這比我想象的要容易理解。 – Dharmit 2015-03-02 07:51:05